#include <iostream>
#include <cstdio>
using namespace std;
const int mod=1000000007;
int phi(long long m)
{
long long rea=m;
for(long long i=2;i*i<=m;i++)
{
if(m%i==0)
rea-=rea/i;
while(m%i==0)
m/=i;
}
if(m>1)
rea-=rea/m;
return rea;
}
int main()
{
/*欧拉函数一个小小的性质:
求小于n并且与n互质的数的和为:m*phi[m]/2;*/
long long m,ans;
while(~scanf("%lld",&m))
{
if(m==0)break;
ans=phi(m);
ans=(m*(m-1)/2-m*ans/2)%mod;
printf("%lld\n",ans);
}
return 0;
}#include <iostream>
#include <cstdio>
using namespace std;
const int mod=1000000007;
int phi(long long m)
{
long long rea=m;
for(long long i=2;i*i<=m;i++)
{
if(m%i==0)
rea-=rea/i;
while(m%i==0)
m/=i;
}
if(m>1)
rea-=rea/m;
return rea;
}
int main()
{
/*欧拉函数一个小小的性质:
求小于n并且与n互质的数的和为:n*phi[n]/2;*/
long long m,ans;
while(~scanf("%lld",&m))
{
if(m==0)break;
ans=phi(m);
ans=(m*(m-1)/2-m*ans/2)%mod;
printf("%lld\n",ans);
}
return 0;
}