#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#define mt(a) memset(a,0,sizeof(a))
using namespace std;
const int mod=10007;
typedef long long ll;
ll a[10001];
ll num[10001];
ll cnt[10001];
ll get(ll n)
{
int f=1;
f=n*n;
f%=mod;
return f;
}
int main()
{
ll n;
while(~scanf("%lld",&n))
{
ll mx=-100;
mt(a);
mt(cnt);
mt(num);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
num[a[i]]++;
mx=max(mx,a[i]);
}
ll ans=0;
for(ll i=mx;i>=2;i--)
{
int ret=num[i];
for(int j=i*2;j<=mx;j+=i)
{
cnt[i]=(cnt[i]-cnt[j]+mod)%mod;
ret+=num[j];
}
// cout<<ret<<endl;
cnt[i]+=get(ret);//想清楚。
cnt[i]+=mod;
cnt[i]%=mod;
ll p=i*(i-1)%mod;
ans=(ans+(cnt[i]*p))%mod;
}
cout<<ans<<endl;
}
return 0;
}
来源: http://www.bubuko.com/infodetail-2275372.html