#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cinttypes>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<string>
#include<stack>


#define FSCNd64 "%" SCNd64
#define FPRId64 "%" PRId64

using namespace std;

using ll=long long;
using vi=vector<int>;
using vvi=vector<vi>;
using pii=pair<int,int>;
using vll=vector<ll>;
using vvll=vector<vll>;
using vpii=vector<pii>;

#define PI 3.1415926535897932384626433832795

template<typename X>
bool max_u(X&m, X v)
{
	if(m<v)
	{
		m=v;
		return true;
	}
	return false;
}


template<typename X>
bool min_u(X&m, X v)
{
	if(m>v)
	{
		m=v;
		return true;
	}
	return false;
}


int bit_count(ll v)
{
	int ret=0;

	for(;v>0;)
	{
		ret++;
		v&=v-1;
	}

	return ret;
}


int msb(ll v)
{
	if(v==0) return -1;

	int ret=0;
	if(v & 0xFFFFFFFF00000000LL) v>>=32,ret+=32;
	if(v & 0xFFFF0000LL) v>>=16,ret+=16;
	if(v & 0xFF00) v>>=8,ret+=8;
	if(v & 0xF0) v>>=4,ret+=4;
	if(v & 0xC) v>>=2,ret+=2;
	if(v & 0x2) v>>=1,ret+=1;
	return ret;
}


int lsb(ll v)
{
	if(v==0) return -1;

	int ret=0;
	if(!(v & 0xFFFFFFFFLL)) v>>=32,ret+=32;
	if(!(v & 0xFFFF)) v>>=16,ret+=16;
	if(!(v & 0xFF)) v>>=8,ret+=8;
	if(!(v & 0xF)) v>>=4,ret+=4;
	if(!(v & 0x3)) v>>=2,ret+=2;
	if(!(v & 0x1)) v>>=1,ret+=1;
	return ret;
}



template<typename X>
struct segtree_t
{
	int n;
	int base;
	std::vector<X> t;
	segtree_t(int n) : n(n)
	{
		for(base=1;base<n;base*=2)
			;

		t.resize(base*2);
	}

	void set_i(int x)
	{
		if(x==0) return;
		t[x]=t[x*2]+t[x*2+1];
		set_i(x/2);
	}

	void set(int x)
	{
		int y=base+x;
		t[y]=1;
		set_i(y/2);
	}

	int get_i(int x)
	{
		if(x==0) return 0;
		int ret=get_i(x/2-1);
		if(x&1) ret+=t[x-1];
		return ret;
	}

	int get(int x)
	{
		return t[base+x]+get_i(x/2);
	}

	int search(int x)
	{
		int y=base+x;

		if(x<0) return -1;
		int u=1;
		for(;y>0;)
		{
			if(t[y]<u) break;
			if(y&1)
			{
				y--;
				if(t[y]<u) break;
			}
			y=y/2-1;
			u*=2;
		}

		if(y==0) return y-base;

		for(u/=2;u>0;u/=2)
		{
			if(t[y*2+1]<u) y=y*2+1;
			else y=y*2;
		}
		return y-base;
	}

	bool setx(int x)
	{
		int idx=search(x);
		if(idx<0) return false;
		set(idx);
		return true;
	}

};


using pli=pair<ll,int>;
bool cmp(pli&a, pli&b)
{
	ll aa=llabs(a.first), ab=llabs(b.first);
	if(aa!=ab)
	{
		return aa>ab;
	}
	return a.second<b.second;
}


struct solve
{
	solve(){}
	ll operator()(ll s,  vector<pair<ll,int>>&x)
	{
		int n=x.size();
		segtree_t<int> tp(n), tn(n);
		ll ret=s;

		sort(x.begin(), x.end(), cmp);
		for(int i=n;i<tp.base;i++) tp.set(i);
		for(int i=n;i<tn.base;i++) tn.set(i);
//for(auto&m:x) cout << "(" << m.first << "," << m.second << ") ";
//cout<<"\n" << "s=" << s << "\n";
		for(int i=0;i<n;i++)
		{
			int k=x[i].second-1;
			int k_=n-2-k;

			if(x[i].first>=0)
			{
				if(tp.setx(k))
				{
					ret+=x[i].first;
				}
			}
			else
			{
				if(!tn.setx(k_))
				{
					ret+=x[i].first;
				}
			}
		}
		return ret;
	}
};

int main(void)
{
//	ios::sync_with_stdio(false);
//	cin.tie(nullptr);

	int t=0;
	cin >> t;
	for(;t;t--)
	{
		int n;
		cin >> n;
		if(cin.fail()) break;
		vector<pair<ll,int>> x(n);

		ll s=0;
		for(int i=0;i<n;i++)
		{
			int k, l, r;
			cin >> k >> l >> r;
			x[i]=make_pair(l-r, k);
			s+=r;
		}
		sort(x.rbegin(), x.rend());
		cout << solve()(s, x) << "\n";
	}
	return 0;
}


Measured memory_bytes: 10312