最后一个点970ms,代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,f[10000010],ans;
bool noPM[10000010];
vector<int> prime;
signed main(){
scanf("%lld",&n);
for(int i=2;i*i<=n;i++){
if(!noPM[i]){
for(int j=i*i;j<=n;j+=i) noPM[j]=1;
}
}
for(int i=2;i<=n;i++){
if(!noPM[i]) prime.push_back(i);
}
for(int i=1;i<=n;i++) f[i]=i;
for(int i=0;i<prime.size();i++){
int p=prime[i];
for(int j=p;j<=n;j+=p) f[j]=f[j]/p*(p-1);
}
for(int i=1;i<=n;i++) f[i]+=f[i-1];
for(int i=1;i<=n;i++) ans=(ans+i*i%mod*(f[n/i]*2-1)%mod)%mod;
printf("%lld",ans);
return 0;
}