#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
using namespace std;
typedef long long LL;
const LL MOD=1e9+7;
const int maxn=2e5+1;

LL mul(LL a,LL b) { return a*b%MOD; }
LL pm(LL a,LL n,LL p) {
	LL ret=1;
	for (a%=p;n;n>>=1,a=a*a%p)
		if (n&1) ret=ret*a%p;
	return ret;
}

LL miu[maxn]; bool vmiu[maxn];
LL plist[maxn],cnt;
void dosieve(LL n=maxn-1) {
	miu[1]=1;
	for (LL i=2;i<=n;i++) {
		if (!vmiu[i]) miu[i]=-1,plist[++cnt]=i;
		for (LL j=1;j<=cnt&&i*plist[j]<=n;j++) {
			vmiu[i*plist[j]]=1;
			if (i%plist[j]==0) {
				miu[i*plist[j]]=0;
				break;
			}
			else miu[i*plist[j]]=-miu[i];
		}
	}
}

struct BIT {
	LL sh[maxn];
	void add(LL d,LL v) {
		v=(MOD+v)%MOD;
		for (;d<maxn;d+=d&-d) sh[d]=(sh[d]+v)%MOD;
	}
	LL sum(LL d) {
		LL ret=0;
		for (;d;d-=d&-d) ret=(ret+sh[d])%MOD;
		return ret;
	}
} bits;

struct fs {
	LL n,m,a;
	int id;
	bool operator<(const fs &t) const { return a<t.a; }
} wu[maxn];

LL sum[maxn];
LL inv[maxn];
LL ans[maxn];
LL cal(LL n,LL m,LL d) {
	LL nd=n/d,md=m/d;
	return mul((nd+1)*nd/2%MOD, (md+1)*md/2%MOD);  //--
}

void init(LL N) {
	static LL n=0;
	for (LL t=n+1;t<=N;t++)
		for (LL d=t;d<=maxn-1;d+=t) {
			bits.add(d, -sum[d]);
			(sum[d] += mul(mul(miu[d/t],inv[t]), mul(d,d))) %= MOD;
			bits.add(d, sum[d]);
		}
	n=N;
}
int main() {
	dosieve();
	for (int i=1;i<maxn;i++) miu[i]=(MOD+miu[i])%MOD;

	inv[1] = 1;
	for (int i = 2; i<maxn; i++)
	    inv[i] = inv[MOD%i]*(MOD-MOD/i)%MOD;

	int T; scanf("%d",&T);
	for (int tt=1;tt<=T;tt++) {
		LL n,m,a;
		scanf("%lld%lld%lld",&n,&m,&a);
		wu[tt]=(fs){n,m,a,tt};
	}
	sort(wu+1,wu+1+T);

	for (int z=1;z<=T;z++) {
		init(wu[z].a);
		LL n=wu[z].n,m=wu[z].m;
		LL ans=0;
		LL ni=1,mi=1,nj=n/(n/ni),mj=m/(m/mi);
		while (ni<=n&&mi<=m) {
			if (nj<ni) nj=n/(n/ni); if (mj<mi) mj=m/(m/mi);
			if (nj<mi) ni=nj+1;
			else if (mj<ni) mi=mj+1;
			else if (nj<mj) {
				ans = (ans + ( bits.sum(nj) + MOD - bits.sum(max(ni,mi)-1) ) * cal(n,m,nj) ) % MOD;
				ni=nj+1;
			}
			else {
				ans = (ans + ( bits.sum(mj) + MOD - bits.sum(max(ni,mi)-1) ) * cal(n,m,mj) ) % MOD;
				mi=mj+1;
			}
		}
		::ans[wu[z].id]=ans;
	}
	FOR (i,1,T) printf("%lld\n",ans[i]);
	return 0;
}

/*
	这题在写的时候因为爆long long，WA了好多次。在听了闵爷的分析后，找了一会儿，终于发现了bug...看来确实应该根据逻辑推理来做题，而不是盲目地找错。
*/
