/*
  This C++ Source Is
  Writen By syksykCCC
  (2020)
*/
#include <bits/stdc++.h>
#define rep(i, x, y) for(register int i = x; i < y; i++)
#define REP(i, x, y) for(register int i = x; i <= y; i++)
#define per(i, x, y) for(register int i = x; i > y; i--)
#define PER(i, x, y) for(register int i = x; i >= y; i--)
#define repl(i, x, y) for(register long long i = x; i < y; i++)
#define REPL(i, x, y) for(register long long i = x; i <= y; i++)
#define perl(i, x, y) for(register long long i = x; i > y; i--)
#define PERL(i, x, y) for(register long long i = x; i >= y; i--)
#define LLL __int128
#define int128 __int128
#define DEBUG(x) cerr << #x << " : " << x << endl
using namespace std;
typedef unsigned int uint;
typedef long long int64;
typedef long long LL;
typedef unsigned long long uint64;
typedef unsigned long long ULL;
typedef long double LLF;
inline void NO() { cout << "NO\n"; }
inline void YES() { cout << "YES\n"; }
inline void NEG() { cout << "-1\n"; }
template<typename T> inline bool chkmax(T &a, T b) { return a < b ? a = b, true : false; }
template<typename T> inline bool chkmin(T &a, T b) { return a > b ? a = b, true : false; }
template<typename T> inline void read(T &val)
{
	val = 0; char c = getchar(); int f = 1;
	while(!isdigit(c)) { if(c == '-') f = -1; c = getchar(); }
	while(isdigit(c)) { val = (val << 3) + (val << 1) + (c ^ 48); c = getchar(); }
	val *= f;
}
template<typename T> void write_(T val) { if(!val) return; write_(val / 10); putchar(val % 10 + 48); }
template<typename T> inline void write(T val)
{
	if(val == 0) putchar(48);
	else if(val < 0) { putchar('-'); write_(-val); }
	else write_(val);
}

#define int long long

const int MOD = 1e9 + 7;
int T, N, A, B;



signed main()
{
#ifdef LOCAL
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
#endif
//	ios::sync_with_stdio(false);
	read(T);
	
	while(T--)
	{
		read(N); read(A); read(B);
		if(A + B > N)
		{
			puts("0");
			continue;
		}
		int x = N - A - B + 2;
		printf("%lld\n", (2LL * x * (x - 1) % MOD * (N - A + 1) % MOD * (N - B + 1) % MOD
		- (x * (x - 1) % MOD * x % MOD * (x - 1) % MOD) + MOD) % MOD);
	}
	return 0;
}
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <string>
#include <bitset>
#include <cmath>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;

//infの設定
#define INF32 2147483647
#define INF64 9223372036854775807
#define PRIME (ll)1000000007
#define PI 3.141592653589793238
//repマクロ
#define rep(i,m,n) for (int i=(m); (i)<(int)(n); ++(i))
#define rrep(i,m,n) for (int i=(m); (i)>(int)(n); --(i))
//その他
#define eb emplace_back
#define ALL(v) v.begin(), v.end()
typedef long long ll;
typedef pair<long long,long long> Pl;
//#define int long long



//Combinatonを巨大素数で割った余りを出力するやーつ)
vector<ll> fac(5050505,INF64),finv(5050505,INF64),inv(5050505,INF64);
ll MOD=1000000007;
void cprimeInit(ll n){
    fac.at(0)=fac.at(1)=1;
    finv.at(0)=finv.at(1)=1;
    inv.at(1)=1;
    for(ll i=2;i<n+1;i++){
        fac.at(i)=fac.at(i-1)*i%MOD;
        inv.at(i)=MOD-inv.at(MOD%i)*(MOD/i)%MOD;
        finv.at(i)=finv.at(i-1)*inv.at(i)%MOD;
    }
}
long long cprime(ll n,ll k){
    if(n<k) return 0;
    if(n<0||k<0) return 0;
    return fac.at(n)*(finv.at(k)*finv.at(n-k)%MOD)%MOD;
}



int main(){
    ll N,M,K; cin>>N>>M>>K;
    ll ans=0;

    if(N-K>M){
        ans=0;
    }else{
        cprimeInit(2020202);
        ans=cprime(N+M,N)-cprime(N+M,N-K-1);
    }
    cout<<(ans+PRIME)%PRIME<<endl;

    return 0;
}

