#include <iostream>
#include <vector>
using namespace std;
const int MOD = 1000000007;
const int MAX = 101; // 假设a,b,c的最大值为100,根据实际情况调整
// 三维DP数组
long long dp[MAX][MAX][MAX];
void precomputeDP() {
// 初始化边界条件:当任一参数<=0时,结果为1
for (int i = 0; i < MAX; i++) {
for (int j = 0; j < MAX; j++) {
for (int k = 0; k < MAX; k++) {
if (i <= 0 || j <= 0 || k <= 0) {
dp[i][j][k] = 1;
}
}
}
}
// 自底向上计算DP数组
for (int i = 1; i < MAX; i++) {
for (int j = 1; j < MAX; j++) {
for (int k = 1; k < MAX; k++) {
if (i < j && j < k) {
dp[i][j][k] = (dp[i][j][k-1] + dp[i][j-1][k-1] - dp[i][j-1][k] + MOD) % MOD;
} else {
dp[i][j][k] = (dp[i-1][j][k] + dp[i-1][j-1][k] + dp[i-1][j][k-1] - dp[i-1][j-1][k-1] + MOD) % MOD;
}
}
}
}
}
int main() {
// 预计算所有可能的结果
precomputeDP();
int t;
cin >> t;
while (t--) {
int a, b, c;
cin >> a >> b >> c;
// 确保不越界
a = min(a, MAX-1);
b = min(b, MAX-1);
c = min(c, MAX-1);
cout << dp[a][b][c] << endl;
}
return 0;
}