#include <set>
#include <bitset>
#include <list>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#include <ios>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <utility>
#include <complex>
#include <numeric>
#include <functional>
#include <cmath>
#include <ctime>
#include <climits>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cassert>
#define lson rt << 1, l, m
#define rson rt << 1 | 1, m + 1, r
using namespace std;
const int INF = 0x7FFFFFFF;
const double EPS = 1e-10;
const double PI = 2 * acos (0.0);
const int MOD = 7;
const int maxn = 10000000 + 66;
//定义素数判断表和素数表
bool prime[maxn+10];
long long primelist[maxn+10], prime_len;
long long euler[maxn+10], sum[maxn+10];
void GetPrime ()
{
memset (prime, true, sizeof (prime));
prime_len = 0;
for (long long i = 2; i <= maxn; i++)
{
if (prime[i])
{
primelist[prime_len++] = i;
euler[i] = i - 1;
}
for (long long j = 0; j < prime_len; j++)
{
if (i * primelist[j] > maxn)
break;
prime[i*primelist[j]] = false;
if (i % primelist[j] == 0)
{
euler[i*primelist[j]] = euler[i] * primelist[j];
break;
}
else
euler[i*primelist[j]] = euler[i] * (primelist[j] - 1);
}
}
}
long long Solve (long long n)
{
long long tot = 0;
for (long long i = 0; i < prime_len && primelist[i] <= n; i++)
tot += 1 + sum[n/primelist[i]];
return tot;
}
int main()
{
// freopen ("aaa.txt", "r", stdin);
GetPrime();
memset (sum, 0, sizeof (sum));
long long n;
scanf ("%lld", &n);
for (int i = 2; i <= n; i++)
sum[i] += sum[i-1] + (euler[i] << 1);
printf ("%lld\n", Solve (n));
return 0;
}