public class Euler153 {
    static long sigmaPrefix(int n) {
        long s = 0;
        int l = 1;
        while (l <= n) {
            int q = n / l, r = n / q;
            long intSum = ((long) l + r) * (r - l + 1) / 2;
            s += (long) q * intSum;
            l = r + 1;
        }
        return s;
    }

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

    public static void main(String[] args) {
        int limit = 100000000;
        long answer = sigmaPrefix(limit);
        for (int a = 1; (long) a * a <= limit; a++) {
            int bmax = (int) Math.sqrt(limit - (long) a * a);
            for (int b = 1; b <= bmax; b++) {
                if (gcd(a, b) != 1)
                    continue;
                int norm = a * a + b * b;
                answer += 2L * a * sigmaPrefix(limit / norm);
            }
        }
        System.out.println(answer);
    }
}
