Cod sursa(job #108435)
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int N = 1000010;
const int NP = 78498;
int fp[N], fple[N], fprem[N], phi[N];
void ciur() {
const int MX = 1000000;
bool* pr = (bool*) malloc(sizeof(bool)*(MX+1)); memset(pr,true,sizeof(bool)*(MX-1));
pr[0] = pr[1] = false;
for (int i = 2; i <= MX; ++i) {
if (pr[i]) {
fp[i] = fple[i] = i; fprem[i] = 1;
for (int j = 2; i*j <= MX; ++j) {
pr[i*j] = false;
fp[i*j] = i;
fple[i*j] = i;
for (fprem[i*j] = j; fprem[i*j] % i == 0; fprem[i*j] /= i, fple[i*j] *= i);
}
}
}
}
int main() {
freopen("fractii.in","rt",stdin);
freopen("fractii.out","wt",stdout);
int n = 0;
scanf("%d",&n);
ciur();
long long s = 1;
phi[1] = 1;
for (int i = 2; i <= n; ++i) {
phi[i] = (fp[i]-1)*(fple[i]/fp[i])*phi[fprem[i]];
s += phi[i] << 1;
}
printf("%lld\n",s);
return 0;
}