Code:
#include<iostream>
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
template<typename T> void read(T &num){
char c=getchar();num=0;T f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){num=(num<<3)+(num<<1)+(c^48);c=getchar();}
num*=f;
}
template<typename T> void qwq(T x){
if(x>9)qwq(x/10);
putchar(x%10+'0');
}
template<typename T> void write(T x){
if(x<0){x=-x;putchar('-');}
qwq(x);putchar('\n');
}
int co[10010];long long tot[10010];
int prime[10010];int f[10010];bool vis[10010];int len=0;
inline void mu(){
f[1]=1;
rep(i,2,10000){
if(!vis[i]){prime[++len]=i;f[i]=-1;}
rep(j,1,len){
if(prime[j]*i>10000)break;
vis[prime[j]*i]=1;
if(i%prime[j]==0)break;
f[prime[j]*i]=-f[i];
}
}
return;
}
int main(){
int n;
mu();
while(scanf("%d",&n)!=EOF){
int cnt=0;
rep(i,1,10000){tot[i]=0;}
rep(i,1,n){
read(co[i]);
for(int j=1;j*j<=co[i];j++){
tot[j]+=(co[i]%j==0);tot[co[i]/j]+=(co[i]%j==0);
tot[j]-=(j*j==co[i]);
}
}
long long ans=0;
rep(i,1,10000){
long long temp=tot[i]*(tot[i]-1)*(tot[i]-2)*(tot[i]-3);temp/=24;
ans+=temp*f[i];
}
write(ans);
}
return 0;
}