#include <cstdio>
#include <vector>
using int64 = long long;
namespace solve {
const int N = 1000000 + 10;
std::vector<int> divs[N];
std::vector<std::pair<int, int>> edges[N];
int p[N], m;
int64 f[N], mu[N];
void init() {
for (int i = 1; i < N; ++i) {
for (int j = i; j < N; j += i) {
divs[j].push_back(i);
}
}
mu[1] = 1;
m = 0;
for (int i = 2; i < N; ++i) {
if(!p[i]) p[m++] = i, mu[i] = -1;
for (int j = 0; i * p[j] < N && j < m; ++j) {
p[i * p[j]] = 1;
if (i % p[j]) mu[i * p[j]] = -mu[i];
else {
mu[i * p[j]] = 0;
break;
}
}
}
}
void run(int n) {
for (int i = 1; i <= n; ++i) {
edges[i].clear();
f[i] = n / i;
}
int64 ret = 0, A = 0, B = 0;
for (int i = 1; i <= n; ++i) {
ret += mu[i] * f[i] * f[i] * f[i];
}
std::vector<int> from, to, wei;
m = 0;
std::vector<int> deg(n + 1);
for (int i = 1; i <= n; ++i) {
if (!mu[i]) continue;
for (int j = i; j <= n; j += i) {
if (mu[j] && mu[j / i]) {
for (auto &&k: divs[j / i]) {
int x = i * k, y = j / k;
if (x >= y) continue;
deg[x]++;
deg[y]++;
B += (mu[x] * f[y] + mu[y] * f[x]) * f[j] * f[j];
from.push_back(x);
to.push_back(y);
wei.push_back(f[j]);
++m;
}
}
}
}
for (int i = 0; i < m; ++i) {
int u = from[i], v = to[i], w = wei[i];
if (deg[u] < deg[v]) edges[u].emplace_back(v, w);
else edges[v].emplace_back(u, w);
}
std::vector<int> mark(n + 1, -1);
for (int a = 1; a <= n; ++a) {
for (auto &&e: edges[a]) mark[e.first] = e.second;
for (auto &&e: edges[a]) {
int b = e.first, w1 = e.second;
for (auto &&ee: edges[b]) {
int c = ee.first, w2 = ee.second;
if (mark[c] != -1) {
A += mu[a] * mu[b] * mu[c] * w1 * w2 * mark[c];
}
}
}
for (auto &&e: edges[a]) mark[e.first] = -1;
}
ret += A * 6 + B * 3;
printf("%lld\n", ret);
}
}
int main() {
solve::init();
int n;
scanf("%d", &n);
solve::run(n);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIGludDY0ID0gbG9uZyBsb25nOwoKbmFtZXNwYWNlIHNvbHZlIHsKICBjb25zdCBpbnQgTiA9IDEwMDAwMDAgKyAxMDsKICBzdGQ6OnZlY3RvcjxpbnQ+IGRpdnNbTl07CiAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludCwgaW50Pj4gZWRnZXNbTl07CiAgaW50IHBbTl0sIG07CiAgaW50NjQgZltOXSwgbXVbTl07CiAgdm9pZCBpbml0KCkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBOOyArK2kpIHsKICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCBOOyBqICs9IGkpIHsKICAgICAgICBkaXZzW2pdLnB1c2hfYmFjayhpKTsKICAgICAgfQogICAgfQogICAgbXVbMV0gPSAxOwogICAgbSA9IDA7CiAgICBmb3IgKGludCBpID0gMjsgaSA8IE47ICsraSkgewogICAgICBpZighcFtpXSkgcFttKytdID0gaSwgbXVbaV0gPSAtMTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGkgKiBwW2pdIDwgTiAmJiBqIDwgbTsgKytqKSB7CiAgICAgICAgcFtpICogcFtqXV0gPSAxOwogICAgICAgIGlmIChpICUgcFtqXSkgbXVbaSAqIHBbal1dID0gLW11W2ldOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXVbaSAqIHBbal1dID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICB2b2lkIHJ1bihpbnQgbikgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgIGVkZ2VzW2ldLmNsZWFyKCk7CiAgICAgIGZbaV0gPSBuIC8gaTsKICAgIH0KICAgIGludDY0IHJldCA9IDAsIEEgPSAwLCBCID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICByZXQgKz0gbXVbaV0gKiBmW2ldICogZltpXSAqIGZbaV07CiAgICB9CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGZyb20sIHRvLCB3ZWk7CiAgICBtID0gMDsKICAgIHN0ZDo6dmVjdG9yPGludD4gZGVnKG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICBpZiAoIW11W2ldKSBjb250aW51ZTsKICAgICAgZm9yIChpbnQgaiA9IGk7IGogPD0gbjsgaiArPSBpKSB7CiAgICAgICAgaWYgKG11W2pdICYmIG11W2ogLyBpXSkgewogICAgICAgICAgZm9yIChhdXRvICYmazogZGl2c1tqIC8gaV0pIHsKICAgICAgICAgICAgaW50IHggPSBpICogaywgeSA9IGogLyBrOwogICAgICAgICAgICBpZiAoeCA+PSB5KSBjb250aW51ZTsKICAgICAgICAgICAgZGVnW3hdKys7CiAgICAgICAgICAgIGRlZ1t5XSsrOwogICAgICAgICAgICBCICs9IChtdVt4XSAqIGZbeV0gKyBtdVt5XSAqIGZbeF0pICogZltqXSAqIGZbal07CiAgICAgICAgICAgIGZyb20ucHVzaF9iYWNrKHgpOwogICAgICAgICAgICB0by5wdXNoX2JhY2soeSk7CiAgICAgICAgICAgIHdlaS5wdXNoX2JhY2soZltqXSk7CiAgICAgICAgICAgICsrbTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKSB7CiAgICAgIGludCB1ID0gZnJvbVtpXSwgdiA9IHRvW2ldLCB3ID0gd2VpW2ldOwogICAgICBpZiAoZGVnW3VdIDwgZGVnW3ZdKSBlZGdlc1t1XS5lbXBsYWNlX2JhY2sodiwgdyk7CiAgICAgIGVsc2UgZWRnZXNbdl0uZW1wbGFjZV9iYWNrKHUsIHcpOwogICAgfQogICAgc3RkOjp2ZWN0b3I8aW50PiBtYXJrKG4gKyAxLCAtMSk7CiAgICBmb3IgKGludCBhID0gMTsgYSA8PSBuOyArK2EpIHsKICAgICAgZm9yIChhdXRvICYmZTogZWRnZXNbYV0pIG1hcmtbZS5maXJzdF0gPSBlLnNlY29uZDsKICAgICAgZm9yIChhdXRvICYmZTogZWRnZXNbYV0pIHsKICAgICAgICBpbnQgYiA9IGUuZmlyc3QsIHcxID0gZS5zZWNvbmQ7CiAgICAgICAgZm9yIChhdXRvICYmZWU6IGVkZ2VzW2JdKSB7CiAgICAgICAgICBpbnQgYyA9IGVlLmZpcnN0LCB3MiA9IGVlLnNlY29uZDsKICAgICAgICAgIGlmIChtYXJrW2NdICE9IC0xKSB7CiAgICAgICAgICAgIEEgKz0gbXVbYV0gKiBtdVtiXSAqIG11W2NdICogdzEgKiB3MiAqIG1hcmtbY107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoYXV0byAmJmU6IGVkZ2VzW2FdKSBtYXJrW2UuZmlyc3RdID0gLTE7CiAgICB9CiAgICByZXQgKz0gQSAqIDYgKyBCICogMzsKICAgIHByaW50ZigiJWxsZFxuIiwgcmV0KTsKICB9Cn0KCmludCBtYWluKCkgewogIHNvbHZlOjppbml0KCk7CiAgaW50IG47CiAgc2NhbmYoIiVkIiwgJm4pOwogIHNvbHZlOjpydW4obik7CiAgcmV0dXJuIDA7Cn0K