public class Euler195 {
    static int gcd(int a, int b) {
        while (b != 0) {
            int t = b;
            b = a % b;
            a = t;
        }
        return a;
    }

    static long floorCDivQSqrt3(long C, long q) {
        long C2 = C * C;
        long denom = 3 * q * q;
        long est = (long) Math.sqrt((double) (C2 / denom));
        while ((est + 1) * (est + 1) * 3 * q * q <= C2)
            est++;
        while (est > 0 && est * est * 3 * q * q > C2)
            est--;
        return est;
    }

    public static void main(String[] args) {
        long N = 1053779L;
        long total = 0;
        long CB = 2 * N, CA = 6 * N;
        long qLimB = floorCDivQSqrt3(CB, 1);
        // Type B: q = n*(n+t), t%3!=0, gcd(n,t)=1
        for (long n = 1; n * (n + 1) <= qLimB; n++) {
            long tMax = qLimB / n - n;
            for (long t = 1; t <= tMax; t++) {
                if (t % 3 == 0)
                    continue;
                if (gcd((int) n, (int) t) != 1)
                    continue;
                long q = n * (n + t);
                total += floorCDivQSqrt3(CB, q);
            }
        }
        long qLimA = floorCDivQSqrt3(CA, 1);
        // Type A: q = t*(3n+t), t%3!=0, gcd(n,t)=1
        for (long t = 1; t * (t + 3) <= qLimA; t++) {
            if (t % 3 == 0)
                continue;
            long nMax = (qLimA / t - t) / 3;
            for (long n2 = 1; n2 <= nMax; n2++) {
                if (gcd((int) n2, (int) t) != 1)
                    continue;
                long q = t * (3 * n2 + t);
                total += floorCDivQSqrt3(CA, q);
            }
        }
        System.out.println(total);
    }
}
