rt,复杂度没问题,但是后三个点一直过不去
#include<bits/stdc++.h>
#define int long long
#define mod 1000000007ll
#define N 100000
using namespace std;
int n,m,k,p[N+5],vis[N+5],mu[N+5],s0[N+5],nums[N+5],cnt[N+5],qc[N+5],d[N+5],top;
//质数,合数标记,莫比乌斯函数,约数个数,最小质因子数,不同质因子数,去重后的数
int f[N+5][25],g[N+5][25],ans;
int test;
void eu(){
mu[1]=1;
mu[1]=1;s0[1]=1;nums[1]=1;cnt[1]=1;qc[1]=1;
for(int i=2;i<=N;i++){
if(!vis[i]){
mu[i]=-1;
p[++top]=i;
s0[i]=2;
nums[i]=1;
cnt[i]=2;
qc[i]=i;
}
for(int j=1;j<=top&&i*p[j]<=N;j++){
int k=i*p[j];
vis[k]++;
if(i%p[j]==0){
mu[k]=0;
nums[k]=nums[i]+1;
s0[k]=s0[i]/(nums[i]+1)*(nums[k]+1);
cnt[k]=cnt[i];
qc[k]=qc[i];
break;
}
mu[k]=-mu[i];
cnt[k]=cnt[i]+1;
s0[k]=s0[i]*s0[p[j]];
nums[k]=1;
qc[k]=qc[i]*p[j];
}
}
for(int i=1;i<=N;i++){
f[i][1]=f[i-1][1]+s0[i];
g[i][1]=g[i-1][1]+mu[i];
}
}
void find(int now,int lst){
int num=cnt[now];
int res=0;
for(int l=1,r;l<=m;l=r+1){
r=min(m/(m/l),k/(k/l));
res=(res+(g[r][num]-g[l-1][num])*f[m/l][num]*f[k/l][num]+mod)%mod;
}
ans=(ans+res*d[now])%mod;
for(int i=lst;i<=top&&now*p[i]<=n;i++){
for(int l=1,r;l<=m;l=r+1){
r=min(m/(m/l),k/(k/l));
g[r][num+1]=g[r][num]+g[r/p[i]][num+1];
f[m/l][num+1]=f[m/l][num]-f[m/l/p[i]][num];
f[k/l][num+1]=f[k/l][num]-f[k/l/p[i]][num];
}
find(now*p[i],i+1);
}
}
int t;
signed main(){
//freopen("aaa.in","r",stdin);
ios::sync_with_stdio(false);
eu();
cin>>t;
while(t--){
ans=0;
cin>>n>>m>>k;
if(n>m)swap(n,m);
if(n>k)swap(n,k);
if(m>k)swap(m,k);
for(int i=1;i<=n;i++)d[i]=0;
for(int i=1;i<=n;i++)d[qc[i]]+=n/i;
find(1,1);
cout<<ans<<"\n";
}
}