import java.util.*;

public class Euler276 {
    static long allTrianglesWithPerimeter(int p) {
        if ((p & 1) == 0) {
            long lp = p;
            return (lp * lp + 24L) / 48L;
        }
        long t = p + 3L;
        return (t * t + 24L) / 48L;
    }

    static int[] mobiusUpTo(int n) {
        int[] mu = new int[n + 1];
        int[] lp = new int[n + 1];
        List<Integer> primes = new ArrayList<>(n / 10);

        mu[1] = 1;
        for (int i = 2; i <= n; ++i) {
            if (lp[i] == 0) {
                lp[i] = i;
                primes.add(i);
                mu[i] = -1;
            }
            for (int p : primes) {
                long v = (long) i * p;
                if (v > n || p > lp[i]) {
                    break;
                }
                lp[(int) v] = p;
                if (p == lp[i]) {
                    mu[(int) v] = 0;
                    break;
                }
                mu[(int) v] = -mu[i];
            }
        }
        return mu;
    }

    public static String solve() {
        int perimeterLimit = 10_000_000;
        int[] mu = mobiusUpTo(perimeterLimit);

        long[] prefixAll = new long[perimeterLimit + 1];
        for (int p = 1; p <= perimeterLimit; ++p) {
            prefixAll[p] = prefixAll[p - 1] + allTrianglesWithPerimeter(p);
        }

        long sum = 0;
        for (int d = 1; d <= perimeterLimit; ++d) {
            int muD = mu[d];
            if (muD == 0) {
                continue;
            }
            long add = prefixAll[perimeterLimit / d];
            sum += muD * add;
        }

        return String.valueOf(sum);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
