/* 求所有小于N且与N不互质的数的和。 若:gcd(n,m)=1,那么gcd(n,n-m)=1; sum(n)=phi(n)*n/2; //sum(n)为小于n的所有与n互质的数的和 //phi(n)为小于n的所有与n互质的数的个数*/#include #include #include #include #include #include #include typedef long long LL;using namespace std;LL euler(LL n){ LL m=(int)sqrt(n+0.5); LL ans=n; for(LL i=2;i<=m;i++) if(n%i==0) { ans=ans/i*(i-1); while(n%i==0) n/=i; } if(n>1) ans=ans/n*(n-1); return ans;}int main (){ LL n; while(scanf("%lld",&n),n) { LL sum=n*(n-1)>>1; LL t=euler(n)*n>>1; sum-=t; printf("%lld\n",sum%1000000007); }}