#include <bits/stdc++.h>
#define rep(begin, end) for (i=begin;i<end;i++)
#define repj(begin, end) for (j=begin;j<end;j++)
#define init(arr, end, val) for (i=0;i<end;i++) arr[i] = val;
#define printint(i0, i1) printf("%d %d\n", i0, i1)

using namespace std;
typedef long long int ll;
const ll inf = 1000000000;
const ll mod = 1000000007;
const ll nil = -1;
ll i, m, k, t, ans;
ll n[100000], a[100000], b[100000];

int main() {
    scanf(" %lld", &t);
    rep(0,t) {
        scanf(" %lld %lld %lld", &n[i], &a[i], &b[i]);
    }
    rep(0,t) {
        if (n[i] < a[i] + b[i]) {
            printf("0\n");
            continue;
        }
        ll anstmp = 0;
        ll X = n[i] - a[i] - b[i] + 1;
        ll Y = n[i] - a[i] + 1;
        ll Z = n[i] - b[i] + 1;
        anstmp = (X * (X+1)) % mod;
        ll YY = (((2 * Y) % mod) * Z) % mod - (X * (X+1)) % mod;
        YY = (YY + mod) % mod;
        anstmp = (anstmp * YY) % mod;
        printf("%lld\n", anstmp);
    }
}
/*
@Author
   Sujeet Kushwaha
*/
 
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace __gnu_pbds; 
 
#define ll long long int
#define fast ios_base::sync_with_stdio(false)
#define fast_input cin.tie(NULL)
#define fast_output cout.tie(NULL)
#define vi vector<long long int> 
#define vp vector<pair<long long int ,long long int>>
#define pb push_back
#define mp make_pair
#define pp pop_back
#define iter vector<int>::iterator
#define pa pair<long long int ,long long int> 
#define f(a,b) for(int a=0;a<b;a++)
#define mod 1000000007
#define F first
#define S second
#define sett set<long long int>
#define um unordered_map<ll,ll>
#define ordered_set tree<pa, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> 
// ll mul(ll a,ll b)
// {
// 	return (a%mod*b%mod)%mod;
// }
// ll add(ll a,ll b)
// {
// 	ll res=a+b;
// 	if(res>=mod)
// 	{
//       res-=mod;
// 	}
// 	return res;
// }
// ll sub(ll a,ll b)
// {
// 	ll res=a-b;
// 	if(res<0)
// 	 res+=mod;
// 	return res;
// }
// ll powmod(ll a, ll b)
// {
//     ll res = 1;
//     while (b) {
//         if (b&1) {
//             res =mul(res,a);
//         }
//         b >>= 1;
//         a=mul(a,a);
//     }
 
//     return res;
// }
 
// ll modinv(ll a)
// {
//     return powmod(a, mod - 2);
// }
//  unordered_map<ll,ll>facti;
//  ll fact(ll n)
//  {
// 	if(n==0)return 1;
// 	if(n<=1)return 1;
// 	if(facti[n]!=0)return facti[n];
// 	return facti[n]=mul(n,fact(n-1));
//  }
//   ll ncr(ll n,ll r)
//   {
//         ll h=fact(n);
// 	ll v=fact(r);
// 	ll j=fact(n-r);
// 	v=mul(v,j);
// 	v=powmod(v,mod-2);
// 	return mul(h,v);
//  }
// int fastread(){
//     int x=0;
//     int c = getchar_unlocked();
//     while(c<48)
//         c = getchar_unlocked();
//     while(c>=48){
//         x = x*10 + (c - 48);
//         c = getchar_unlocked();
//     }
//     return x;
// }
// bool comp(pa a,pa b)
// {
//     if(a.F==b.F)
//     {
//         return v[a.S]<v[b.S];
//     }
//     returna.S<b.S;
// }
vector<pa>g[1000001];
ll dp[1000001];
void dfs(ll v,ll par=-1)
{
        for(pa d:g[v])
        {
                if(d.first-par)
                {
                      dp[d.first]=dp[v]^d.second;
                      dfs(d.first,v);
                }
        }
}
void solve()
{
        ll n;
        cin>>n;
        f(i,n-1)
        {
             ll x,y,w;
             cin>>x>>y>>w;
             x--,y--;
             g[x].pb({y,w});
             g[y].pb({x,w});
        }
        dfs(0);
        ll ans=0;
        f(j,61)
        {
                ll ones,zeros;
                ones=zeros=0;
                f(i,n)
                {
                        if(dp[i]&(1ll<<j))
                        {
                                ones++;
                        }
                        else
                        {
                                zeros++;
                        }
                }
                zeros*=ones;
                zeros%=mod;
                ans+=((1ll<<j)%mod*zeros%mod);
                ans%=mod;
        }
        cout<<ans<<endl;
}
int main() {
	fast;
	fast_input;
	fast_output;
	// ll t;
	// cin>>t;
	// while(t--)
	// {
	  solve();
	// }
	return 0;
}