#include "bits/stdc++.h" using namespace std; using ll = long long; using ld = long double; const double PI = 3.1415926535897932384626433832795; const int dx[] = { 0, 1, 0, -1 }; const int dy[] = { -1, 0, 1, 0 }; int gcd(int x, int y) { return y ? gcd(y, x % y) : x; } ll gcd(ll x, ll y) { return y ? gcd(y, x % y) : x; } int lcm(int x, int y) { return x / gcd(x, y) * y; } ll lcm(ll x, ll y) { return x / gcd(x, y) * y; } vector sieveOfEratosthenes(int n) { vector isPrimes(n + 1, true); isPrimes[0] = isPrimes[1] = false; for (int i = 2; i * i <= n; i++) { if (isPrimes[i]) { for (int j = 2 * i; j <= n; j += i) { isPrimes[j] = false; } } } vector res; for (int i = 2; i <= n; i++) { if (isPrimes[i]) { res.push_back(i); } } return res; } int main() { ios::sync_with_stdio(false); cin.tie(0); const int N_MAX = 100000; int n; cin >> n; vector nPrimes = sieveOfEratosthenes(n); vector n3Primes = sieveOfEratosthenes(3 * n); ll ans = 0; vector cnt(3 * N_MAX + 1), primes; for (auto p : nPrimes) { for (auto abc : n3Primes) { if (p >= abc) { continue; } ans += cnt[abc - p]; } for (auto q : primes) { cnt[p + q]++; } primes.emplace_back(p); } cout << ans << endl; return 0; }