#include <stdio.h>
#define NMAX 1000023
int n, sum, arr[10023], c, s;
bool sieve[NMAX], check[10023];
FILE *fin, *fout;
void back(int a, int b, int g)
{
if(g > c) return;
if(b > a)
{
if(a%2)
{
for(int i = 0; i< c; i++)
{
if(check[i] == 0) continue;
s -= n/(arr[i]*check[i]);
fprintf(fout, "- %d a = %d\n", n/(arr[i]*check[i]), a);
}
}
else
{
for(int i = 0; i< c; i++)
{
if(check[i] == 0) continue;
s += n/(arr[i]*check[i]);
fprintf(fout, "+ %d a = %d\n", n/(arr[i]*check[i]), a);
}
}
return;
}
for(int i = g; i< c; i++)
{
if(check[i]) continue;
check[i] = 1;
back(a, b+1, i+1);
check[i] = 0;
}
}
int main()
{
fin = fopen("fractii.in", "r");
fout = fopen("fractii.out", "w");
fscanf(fin, "%d", &n);
for(int i = 2; i< NMAX; i++)
{
if(sieve[i] == 1) continue;
for(int j = 2; j< NMAX; j++)
{
if(i*j >= NMAX) break;
sieve[i*j] = 1;
}
}
sum = n;
for(int i = 2; i <= n; i++)
{
c = 0;
for(int j = 2; j <= i; j++)
{
if(!sieve[j] && i%j == 0)
{
arr[c] = j;
c++;
}
}
for(int j = 0; j< c; j++) check[j] = 0;
s = n;
for(int j = 1; j<= c; j++)
{
fprintf(fout, "i = %d\n", i);
back(j, 1, 0);
}
sum+=s;
}
fprintf(fout, "%d\n", sum);
fclose(fin);
fclose(fout);
return 0;
}