#include using ll = long long; #define rep(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i) #define rrep(i, n) for (int i = ((int)(n)-1); i >= 0; --i) #define all(v) begin(v), end(v) using namespace std; vector min_pf; void prime_factorize_init(int n) { min_pf.resize(n + 1, 0); for (int i = 2; i <= n; i++) { if (min_pf.at(i) == 0) { for (int mul = i; mul <= n; mul += i) { min_pf.at(mul) = i; } } } } vector prime_factorize(int n) { vector res; if (n <= 1) return res; while (n != 1) { res.push_back(min_pf.at(n)); n /= min_pf.at(n); } res.erase(unique(res.begin(), res.end()), res.end()); return res; } constexpr int N = 1000'000; int main() { prime_factorize_init(N); int n; cin >> n; vector cnt(N + 1); ll ans = ll(n) * (n - 1) / 2 - (n - 1); for (int i = n; i > 1; --i) { ans -= (n / i) - 1; auto pf = prime_factorize(i); ll x = 0; for (int S = 0; S < (1 << pf.size()); ++S) { int mul = 1; for (int i = 0; i < pf.size(); ++i) if (S >> i & 1) mul *= pf[i]; if (__builtin_parity(S)) x -= cnt[mul]; else x += cnt[mul]; cnt[mul]++; } ans -= x; } cout << ans << endl; }