http://blog.csdn.net/tc_to_top/article/details/48014357
∑i=1a∑j=1b∑k=1cd(i∗j∗k)=∑gcd(i,j)=1,gcd(i,k)=1,gcd(k,j)=1⌊ai⌋⌊bj⌋⌊ck⌋=∑a⌊ai⌋∑gcd(i,j)=1b⌊bj⌋∑gcd(i,k)=1c⌊ck⌋∗gcd(k,j)==1gcd(k,j)==1=∑d|k,d|jmin(b,c)μ[d]
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int N=2200;
const int mod=1<<30;
int vis[N],pri[N],pn,mu[N],mp[N][N];
typedef __int64 LL;
void init(){
memset(vis,0,sizeof(vis));
int n=2000;
pn=0;
mu[1]=1;
for(int i=2;i<=n;i++){
if(vis[i]==0){
pri[pn++]=i;
mu[i]=-1;
}
for(int j=0;j<pn;j++){
if(pri[j]*i>n)break;
vis[pri[j]*i]=1;
if(i%pri[j]==0){
mu[pri[j]*i]=0;
break;
}
else {
mu[pri[j]*i]=-mu[i];
}
}
}
}
int gcd(int i,int j){
if(mp[i][j]!=-1)return mp[i][j];
if(i==0)return j;
return mp[i][j]=gcd(j%i,i);
}
LL cal(int a,int b){
LL ans=0;
for(int i=1;i<=a;i++)if(gcd(i,b)==1){
ans+=a/i;
}
//printf("%d %d %I64d\n",a,b,ans);
return ans;
}
void prin(int aa[N],int n){
for(int i=0;i<n;i++){
printf("%d%c",aa[i],i==n-1?'\n':' ');
}
}
int main(){
#ifdef DouBi
freopen("in.cpp","r",stdin);
#endif // DouBi
int a,b,c;
init();
//prin(mu,10);
memset(mp,-1,sizeof(mp));
while(scanf("%d%d%d",&a,&b,&c)!=EOF){
LL ans=0;
for(int i=1;i<=a;i++){
for(int j=1;j<=min(b,c);j++)if(gcd(i,j)==1){
ans+=((LL)mu[j]*cal(b/j,i)*cal(c/j,i)*(a/i));
ans=(ans+mod)%mod;
}
}
printf("%I64d\n",ans);
}
return 0;
}