using System.Collections.Generic;
using System;

public class PriorityQueue<T> where T : IComparable
{
    private IComparer<T> _comparer = null;
    private int _type = 0;
    private T[] _heap;
    private int _sz = 0;
    private int _count = 0;
    public PriorityQueue(int maxSize, IComparer<T> comparer)
    {
        _heap = new T[maxSize];
        _comparer = comparer;
    }
    public PriorityQueue(int maxSize, int type = 0)
    {
        _heap = new T[maxSize];
        _type = type;
    }
    private int Compare(T x, T y)
    {
        if (_comparer != null) return _comparer.Compare(x, y);
        return _type == 0 ? x.CompareTo(y) : y.CompareTo(x);
    }
    public void Push(T x)
    {
        _count++;
        var i = _sz++;
        while (i > 0)
        {
            var p = (i - 1) / 2;
            if (Compare(_heap[p], x) <= 0) break;
            _heap[i] = _heap[p];
            i = p;
        }
        _heap[i] = x;
    }
    public T Pop()
    {
        _count--;
        T ret = _heap[0];
        T x = _heap[--_sz];
        int i = 0;
        while (i * 2 + 1 < _sz)
        {
            int a = i * 2 + 1;
            int b = i * 2 + 2;
            if (b < _sz && Compare(_heap[b], _heap[a]) < 0) a = b;
            if (Compare(_heap[a], x) >= 0) break;
            _heap[i] = _heap[a];
            i = a;
        }
        _heap[i] = x;
        return ret;
    }
    public int Count() => _count;
    public T Peek() => _heap[0];
    public bool Contains(T x)
    {
        for (int i = 0; i < _sz; i++) if (x.Equals(_heap[i])) return true;
        return false;
    }
    public void Clear()
    {
        while (this.Count() > 0) this.Pop();
    }
    public IEnumerator<T> GetEnumerator()
    {
        var ret = new List<T>();
        while (this.Count() > 0)
        {
            ret.Add(this.Pop());
        }
        foreach (var r in ret)
        {
            this.Push(r);
            yield return r;
        }
    }
    public T[] ToArray()
    {
        T[] array = new T[_sz];
        int i = 0;
        foreach (var r in this)
        {
            array[i++] = r;
        }
        return array;
    }
}


public class Hello
{
    public static void Main()
    {
        var T = int.Parse(Console.ReadLine().Trim());
        var t = 0;
        while (t++ < T)
        {
            var n = int.Parse(Console.ReadLine().Trim());
            var a1 = new List<int>[n + 1];
            var a2 = new List<int>[n + 2];
            for (int i = 0; i < n + 1; i++)
            {
                a1[i] = new List<int>();
                a2[i] = new List<int>();
            }
            a2[n + 1] = new List<int>();
            var t1 = 0L;
            var t2 = 0L;
            var t3 = 0L;
            for (int i = 0; i < n; i++)
            {
                string[] line = Console.ReadLine().Trim().Split(' ');
                var k = int.Parse(line[0]);
                var L = int.Parse(line[1]);
                var r = int.Parse(line[2]);
                if (L > r) { t1 += r; a1[k].Add(L - r); }
                else if (L < r) { t2 += L; a2[k + 1].Add(r - L); }
                else t3 += r;
            }
            var ans1 = getAns1(n, a1, t1);
            var ans2 = getAns2(n, a2, t2);
            Console.WriteLine(ans1 + ans2 + t3);
        }
    }
    static long getAns2(int n, List<int>[] a, long t2)
    {
        var pq = new PriorityQueue<int>(n + 10, 1);
        var ans = 0L;
        for (int i = 1; i <= n; i++)
        {
            foreach (var x in a[i])
                pq.Push(x);
            if (pq.Count() > 0) ans += pq.Pop();
        }
        return t2 + ans;
    }
    static long getAns1(int n, List<int>[] a, long t1)
    {
        var pq = new PriorityQueue<int>(n + 10, 1);
        var ans = 0L;
        for (int i = n; i >= 1; i--)
        {
            foreach (var x in a[i])
                pq.Push(x);
            if (pq.Count() > 0) ans += pq.Pop();
        }
        return t1 + ans;
    }
}


Measured memory_bytes: 84368