#include <cassert>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cctype>
#include <algorithm>
#include <random>
#include <bitset>
#include <queue>
#include <functional>
#include <set>
#include <map>
#include <vector>
#include <chrono>
#include <iostream>
#include <iomanip>
#include <limits>
#include <numeric>
typedef long long ll;
typedef long double ld;
// quaternion from yhx-12243: https://y...content-available-to-author-only...b.io/OI-transit/records/cf1375I.html
struct quaternion {
ld s, x, y, z;
quaternion (ld s0 = 0, ld x0 = 0, ld y0 = 0, ld z0 = 0) : s(s0), x(x0), y(y0), z(z0) {}
inline quaternion operator - () const {return quaternion(-s, -x, -y, -z);}
inline quaternion conj() const {return quaternion(s, -x, -y, -z);}
inline quaternion operator + (const quaternion &B) const {return quaternion(s + B.s, x + B.x, y + B.y, z + B.z);}
inline quaternion operator - (const quaternion &B) const {return quaternion(s - B.s, x - B.x, y - B.y, z - B.z);}
inline quaternion operator * (const ld k) const {return quaternion(s * k, x * k, y * k, z * k);}
inline quaternion operator * (const quaternion &B) const {
return quaternion(
s * B.s - x * B.x - y * B.y - z * B.z,
s * B.x + x * B.s + y * B.z - z * B.y,
s * B.y - x * B.z + y * B.s + z * B.x,
s * B.z + x * B.y - y * B.x + z * B.s
);
}
inline operator void * () const {return s || x || y || z ? (void *)this : 0;}
inline ld norm2() const {return s * s + x * x + y * y + z * z;}
inline ll intnorm2() const {return llroundl(norm2());}
inline quaternion inv() const {return conj() * (1.l / norm2());}
inline quaternion round() const {
quaternion A(roundl(s), roundl(x), roundl(y), roundl(z)), B(floorl(s) + .5l, floorl(x) + .5l, floorl(y) + .5l, floorl(z) + .5l );
return (*this - A).norm2() <= (*this - B).norm2() ? A : B;
}
inline friend quaternion Ldiv(const quaternion &A, const quaternion &B) {return (B.inv() * A).round();}
inline friend quaternion Rdiv(const quaternion &A, const quaternion &B) {return (A * B.inv()).round();}
inline friend quaternion Lmod(const quaternion &A, const quaternion &B) {return A - B * Ldiv(A, B);}
inline friend quaternion Rmod(const quaternion &A, const quaternion &B) {return A - Rdiv(A, B) * B;}
// find (Hurwitz) quaternion d where A = d u, B = d v.
inline friend quaternion Lgcd(quaternion A, quaternion B) {
static quaternion tmp;
for (; B; tmp = Lmod(A, B), A = B, B = tmp);
return A;
}
inline bool is_int() const {return fabsl(s - roundl(s)) < 1e-10l && fabsl(x - roundl(x)) < 1e-10l && fabsl(y - roundl(y)) < 1e-10l && fabsl(z - roundl(z)) < 1e-10l;}
};
const int N = 3000;
int R;
int sqfree[N];
ll ans;
void test(quaternion q) {
if (q.intnorm2() > R) return;
if (q == quaternion()) return;
quaternion unit, res;
unit = quaternion(0, 1, 0, 0); res = q * unit * q.conj();
int a = std::abs(res.x) + std::abs(res.y) + std::abs(res.z);
unit = quaternion(0, 0, 1, 0); res = q * unit * q.conj();
int b = std::abs(res.x) + std::abs(res.y) + std::abs(res.z);
unit = quaternion(0, 0, 0, 1); res = q * unit * q.conj();
int c = std::abs(res.x) + std::abs(res.y) + std::abs(res.z);
for (int i = 1; i <= (R - 1) / std::max({a, b, c}); ++i)
if (sqfree[i])
ans += ll(R - i * a) * (R - i * b) * (R - i * c);
}
int main() {
std::cin >> R;
std::fill(sqfree + 1, sqfree + R + 1, 1);
for (int i = 2; i <= R; i += 2) sqfree[i] = 0;
for (int i = 2; i * i <= R; ++i)
for (int j = i * i; j <= R; j += i * i)
sqfree[j] = 0;
int rt = ceil(sqrt(R)) + 1;
for (int s = -rt; s <= rt; ++s) for (int x = -rt; x <= rt; ++x) for (int y = -rt; y <= rt; ++y) for (int z = -rt; z <= rt; ++z) {
test(quaternion(s, x, y, z));
test(quaternion(s + .5, x + .5, y + .5, z + .5));
}
std::cout << ans / 24 << '\n';
return 0;
}
I2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxjY3R5cGU+CgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8bGltaXRzPgojaW5jbHVkZSA8bnVtZXJpYz4KCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwoKLy8gcXVhdGVybmlvbiBmcm9tIHloeC0xMjI0MzogaHR0cHM6Ly95Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5iLmlvL09JLXRyYW5zaXQvcmVjb3Jkcy9jZjEzNzVJLmh0bWwKc3RydWN0IHF1YXRlcm5pb24gewoJbGQgcywgeCwgeSwgejsKCXF1YXRlcm5pb24gKGxkIHMwID0gMCwgbGQgeDAgPSAwLCBsZCB5MCA9IDAsIGxkIHowID0gMCkgOiBzKHMwKSwgeCh4MCksIHkoeTApLCB6KHowKSB7fQoJaW5saW5lIHF1YXRlcm5pb24gb3BlcmF0b3IgLSAoKSBjb25zdCB7cmV0dXJuIHF1YXRlcm5pb24oLXMsIC14LCAteSwgLXopO30KCWlubGluZSBxdWF0ZXJuaW9uIGNvbmooKSBjb25zdCB7cmV0dXJuIHF1YXRlcm5pb24ocywgLXgsIC15LCAteik7fQoJaW5saW5lIHF1YXRlcm5pb24gb3BlcmF0b3IgKyAoY29uc3QgcXVhdGVybmlvbiAmQikgY29uc3Qge3JldHVybiBxdWF0ZXJuaW9uKHMgKyBCLnMsIHggKyBCLngsIHkgKyBCLnksIHogKyBCLnopO30KCWlubGluZSBxdWF0ZXJuaW9uIG9wZXJhdG9yIC0gKGNvbnN0IHF1YXRlcm5pb24gJkIpIGNvbnN0IHtyZXR1cm4gcXVhdGVybmlvbihzIC0gQi5zLCB4IC0gQi54LCB5IC0gQi55LCB6IC0gQi56KTt9CglpbmxpbmUgcXVhdGVybmlvbiBvcGVyYXRvciAqIChjb25zdCBsZCBrKSBjb25zdCB7cmV0dXJuIHF1YXRlcm5pb24ocyAqIGssIHggKiBrLCB5ICogaywgeiAqIGspO30KCWlubGluZSBxdWF0ZXJuaW9uIG9wZXJhdG9yICogKGNvbnN0IHF1YXRlcm5pb24gJkIpIGNvbnN0IHsKCQlyZXR1cm4gcXVhdGVybmlvbigKCQkJcyAqIEIucyAtIHggKiBCLnggLSB5ICogQi55IC0geiAqIEIueiwKCQkJcyAqIEIueCArIHggKiBCLnMgKyB5ICogQi56IC0geiAqIEIueSwKCQkJcyAqIEIueSAtIHggKiBCLnogKyB5ICogQi5zICsgeiAqIEIueCwKCQkJcyAqIEIueiArIHggKiBCLnkgLSB5ICogQi54ICsgeiAqIEIucwoJCSk7Cgl9CglpbmxpbmUgb3BlcmF0b3Igdm9pZCAqICgpIGNvbnN0IHtyZXR1cm4gcyB8fCB4IHx8IHkgfHwgeiA/ICh2b2lkICopdGhpcyA6IDA7fQoJaW5saW5lIGxkIG5vcm0yKCkgY29uc3Qge3JldHVybiBzICogcyArIHggKiB4ICsgeSAqIHkgKyB6ICogejt9CglpbmxpbmUgbGwgaW50bm9ybTIoKSBjb25zdCB7cmV0dXJuIGxscm91bmRsKG5vcm0yKCkpO30KCWlubGluZSBxdWF0ZXJuaW9uIGludigpIGNvbnN0IHtyZXR1cm4gY29uaigpICogKDEubCAvIG5vcm0yKCkpO30KCWlubGluZSBxdWF0ZXJuaW9uIHJvdW5kKCkgY29uc3QgewoJCXF1YXRlcm5pb24gQShyb3VuZGwocyksIHJvdW5kbCh4KSwgcm91bmRsKHkpLCByb3VuZGwoeikpLCBCKGZsb29ybChzKSArIC41bCwgZmxvb3JsKHgpICsgLjVsLCBmbG9vcmwoeSkgKyAuNWwsIGZsb29ybCh6KSArIC41bCApOwoJCXJldHVybiAoKnRoaXMgLSBBKS5ub3JtMigpIDw9ICgqdGhpcyAtIEIpLm5vcm0yKCkgPyBBIDogQjsKCX0KCWlubGluZSBmcmllbmQgcXVhdGVybmlvbiBMZGl2KGNvbnN0IHF1YXRlcm5pb24gJkEsIGNvbnN0IHF1YXRlcm5pb24gJkIpIHtyZXR1cm4gKEIuaW52KCkgKiBBKS5yb3VuZCgpO30KCWlubGluZSBmcmllbmQgcXVhdGVybmlvbiBSZGl2KGNvbnN0IHF1YXRlcm5pb24gJkEsIGNvbnN0IHF1YXRlcm5pb24gJkIpIHtyZXR1cm4gKEEgKiBCLmludigpKS5yb3VuZCgpO30KCWlubGluZSBmcmllbmQgcXVhdGVybmlvbiBMbW9kKGNvbnN0IHF1YXRlcm5pb24gJkEsIGNvbnN0IHF1YXRlcm5pb24gJkIpIHtyZXR1cm4gQSAtIEIgKiBMZGl2KEEsIEIpO30KCWlubGluZSBmcmllbmQgcXVhdGVybmlvbiBSbW9kKGNvbnN0IHF1YXRlcm5pb24gJkEsIGNvbnN0IHF1YXRlcm5pb24gJkIpIHtyZXR1cm4gQSAtIFJkaXYoQSwgQikgKiBCO30KCS8vIGZpbmQgKEh1cndpdHopIHF1YXRlcm5pb24gZCB3aGVyZSBBID0gZCB1LCBCID0gZCB2LgoJaW5saW5lIGZyaWVuZCBxdWF0ZXJuaW9uIExnY2QocXVhdGVybmlvbiBBLCBxdWF0ZXJuaW9uIEIpIHsKCQlzdGF0aWMgcXVhdGVybmlvbiB0bXA7CgkJZm9yICg7IEI7IHRtcCA9IExtb2QoQSwgQiksIEEgPSBCLCBCID0gdG1wKTsKCQlyZXR1cm4gQTsKCX0KCWlubGluZSBib29sIGlzX2ludCgpIGNvbnN0IHtyZXR1cm4gZmFic2wocyAtIHJvdW5kbChzKSkgPCAxZS0xMGwgJiYgZmFic2woeCAtIHJvdW5kbCh4KSkgPCAxZS0xMGwgJiYgZmFic2woeSAtIHJvdW5kbCh5KSkgPCAxZS0xMGwgJiYgZmFic2woeiAtIHJvdW5kbCh6KSkgPCAxZS0xMGw7fQp9OwoKY29uc3QgaW50IE4gPSAzMDAwOwoKaW50IFI7CmludCBzcWZyZWVbTl07CgpsbCBhbnM7Cgp2b2lkIHRlc3QocXVhdGVybmlvbiBxKSB7CglpZiAocS5pbnRub3JtMigpID4gUikgcmV0dXJuOwoJaWYgKHEgPT0gcXVhdGVybmlvbigpKSByZXR1cm47CglxdWF0ZXJuaW9uIHVuaXQsIHJlczsKCgl1bml0ID0gcXVhdGVybmlvbigwLCAxLCAwLCAwKTsgcmVzID0gcSAqIHVuaXQgKiBxLmNvbmooKTsKCWludCBhID0gc3RkOjphYnMocmVzLngpICsgc3RkOjphYnMocmVzLnkpICsgc3RkOjphYnMocmVzLnopOwoJdW5pdCA9IHF1YXRlcm5pb24oMCwgMCwgMSwgMCk7IHJlcyA9IHEgKiB1bml0ICogcS5jb25qKCk7CglpbnQgYiA9IHN0ZDo6YWJzKHJlcy54KSArIHN0ZDo6YWJzKHJlcy55KSArIHN0ZDo6YWJzKHJlcy56KTsKCXVuaXQgPSBxdWF0ZXJuaW9uKDAsIDAsIDAsIDEpOyByZXMgPSBxICogdW5pdCAqIHEuY29uaigpOwoJaW50IGMgPSBzdGQ6OmFicyhyZXMueCkgKyBzdGQ6OmFicyhyZXMueSkgKyBzdGQ6OmFicyhyZXMueik7CgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gKFIgLSAxKSAvIHN0ZDo6bWF4KHthLCBiLCBjfSk7ICsraSkKCQlpZiAoc3FmcmVlW2ldKQoJCQlhbnMgKz0gbGwoUiAtIGkgKiBhKSAqIChSIC0gaSAqIGIpICogKFIgLSBpICogYyk7Cn0KCmludCBtYWluKCkgewoJc3RkOjpjaW4gPj4gUjsKCglzdGQ6OmZpbGwoc3FmcmVlICsgMSwgc3FmcmVlICsgUiArIDEsIDEpOwoJZm9yIChpbnQgaSA9IDI7IGkgPD0gUjsgaSArPSAyKSBzcWZyZWVbaV0gPSAwOwoJZm9yIChpbnQgaSA9IDI7IGkgKiBpIDw9IFI7ICsraSkKCQlmb3IgKGludCBqID0gaSAqIGk7IGogPD0gUjsgaiArPSBpICogaSkKCQkJc3FmcmVlW2pdID0gMDsKCglpbnQgcnQgPSBjZWlsKHNxcnQoUikpICsgMTsKCWZvciAoaW50IHMgPSAtcnQ7IHMgPD0gcnQ7ICsrcykgZm9yIChpbnQgeCA9IC1ydDsgeCA8PSBydDsgKyt4KSBmb3IgKGludCB5ID0gLXJ0OyB5IDw9IHJ0OyArK3kpIGZvciAoaW50IHogPSAtcnQ7IHogPD0gcnQ7ICsreikgewoJCXRlc3QocXVhdGVybmlvbihzLCB4LCB5LCB6KSk7CgkJdGVzdChxdWF0ZXJuaW9uKHMgKyAuNSwgeCArIC41LCB5ICsgLjUsIHogKyAuNSkpOwoJfQoKCXN0ZDo6Y291dCA8PCBhbnMgLyAyNCA8PCAnXG4nOwoKCXJldHVybiAwOwp9Cg==