#include <bits/stdc++.h>
const long long INF = 1LL << 60;
const long long MOD = 1000000007;
const double PI = acos(-1.0);
using namespace std;
using ll = long long;
template <class S, class T>
inline bool chmax(S &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class S, class T>
inline bool chmin(S &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
inline ll msb(ll v) { return 1 << (31 - __builtin_clzll(v)); }
inline ll devc(ll x, ll y) { return (x + y - 1) / y; }
inline ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
inline ll lcm(ll a, ll b) { return a * (b / gcd(a, b)); }
struct IoSetup {
  IoSetup() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(10);
    cerr << fixed << setprecision(10);
  }
} iosetup;
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}
template <typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) {
  is >> p.first >> p.second;
  return is;
}
template <typename T1, typename T2, typename T3>
ostream &operator<<(ostream &os, const tuple<T1, T2, T3> &t) {
  os << get<0>(t) << " " << get<1>(t) << " " << get<2>(t);
  return os;
}
template <typename T1, typename T2, typename T3>
istream &operator>>(istream &is, tuple<T1, T2, T3> &t) {
  is >> get<0>(t) >> get<1>(t) >> get<2>(t);
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < (int)v.size(); ++i) {
    os << v[i] << (i + 1 != v.size() ? " " : "");
  }
  return os;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (T &in : v) is >> in;
  return is;
}
template <typename T>
vector<T> cumsum(const vector<T> &X) {
  vector<T> res(X.size() + 1, 0);
  for (int i = 0; i < X.size(); ++i) res[i + 1] += res[i] + X[i];
  return res;
}
template <typename S, typename T, typename F>
pair<T, T> bisearch(S left, T right, F f) {
  while (abs(right - left) > 1) {
    T mid = (right + left) / 2;
    if (f(mid))
      right = mid;
    else
      left = mid;
  }
  return {left, right};
}
template <typename S, typename T, typename F>
double trisearch(S left, T right, F f, int maxLoop = 90) {
  double low = left, high = right;
  while (maxLoop--) {
    double mid_left = high / 3 + low * 2 / 3;
    double mid_right = high * 2 / 3 + low / 3;
    if (f(mid_left) >= f(mid_right))
      low = mid_left;
    else
      high = mid_right;
  }
  return (low + high) * 0.5;
}
template <typename F>
ll ternarySearch(ll L, ll R, F f) {
  ll lo = L - 1, hi = R - 1;
  while (lo + 1 != hi) {
    ll mi = (lo + hi) / 2;
    if (f(mi) <= f(mi + 1))
      hi = mi;
    else
      lo = mi;
  }
  return hi;
}
int main() {
  ll T;
  cin >> T;
  while (T--) {
    ll N;
    cin >> N;
    vector<tuple<ll, ll, ll, ll> > camef;
    vector<tuple<ll, ll, ll, ll> > cameb;
    ll sum = 0;
    vector<tuple<ll, ll, ll> > came(N);
    for (ll i = 0; i < (N); ++i) {
      ll K, L, R;
      cin >> K >> L >> R;
      came[i] = {K, L, R};
      if (L == R)
        sum += L;
      else if (L > R) {
        camef.push_back({K, -(L - R), L, R});
      } else {
        cameb.push_back({K, (R - L), L, R});
      }
    }
    sort((camef).begin(), (camef).end());
    sort((cameb).rbegin(), (cameb).rend());
    vector<tuple<ll, ll, ll, ll> > res(N, {0, 0, 0, 0});
    for (ll i = 0; i < ((ll)camef.size()); ++i) {
      res[i] = camef[i];
    }
    for (ll i = 0; i < ((ll)cameb.size()); ++i) {
      res[N - 1 - i] = cameb[i];
    }
    for (ll i = 0; i < (N); ++i) {
      auto [K, tmp, L, R] = res[i];
      if (K == 0) continue;
      if (i + 1 <= K)
        sum += L;
      else
        sum += R;
    }
    cout << (sum) << '\n';
  }
  return 0;
}
