#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10000007;
template <typename T>
inline void read(T &AKNOI) {
  T x = 0, flag = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') flag = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  AKNOI = flag * x;
}
int n, half;
int pr[MAXN], pcnt, vis[MAXN], phi[MAXN];
int low[MAXN], cnt[MAXN];
void sieve() {
  phi[1] = 1;
  for (int i = 2; i <= n; ++i) {
    if (!vis[i]) {
      pr[++pcnt] = i;
      phi[i] = i - 1;
      low[i] = pcnt;
    }
    ++cnt[low[i]];
    for (int j = 1; j <= pcnt; ++j) {
      int k = i * pr[j];
      if (k > n) break;
      vis[k] = 1;
      low[k] = j;
      if (i % pr[j]) {
        phi[k] = phi[i] * (pr[j] - 1);
      } else {
        phi[k] = phi[i] * pr[j];
        break;
      }
    }
  }
  while (pr[pcnt] > half) --pcnt;
  for (int i = pcnt - 1; i >= 1; --i) {
    cnt[i] += cnt[i + 1];
  }
}
void solve() {
  read(n);
  half = n / 2;
  sieve();
  long long ans = 0, g1 = 0, ban = 0;
  for (int i = 2; i <= n; ++i) {
    if (!vis[i] && i > half) {
      ++ban;
    } else {
      ans += i - 1 - phi[i];
      g1 += phi[i] - 1 - ban;
    }
  }
  ans += g1 * 2;
  long long t3 = 0;
  int rt = sqrt(n), pt = pcnt, c = 0;
  for (int i = 1; i <= pcnt; ++i) {
    if (pr[i] <= rt) continue;
    ++c;
    while (1ll * pr[i] * pr[pt - 1] > n) --pt;
    t3 += cnt[pt];
  }
  ans += t3 - 1LL * c * (c + 1) / 2;
  printf("%lld\n", ans);
}
int main() {
  solve();
  return 0;
}
