public class Euler196 {
    static long rowStart(int r) {
        return (long) r * (r - 1) / 2 + 1;
    }

    static boolean[] sieveRange(long start, long end) {
        int rng = (int) (end - start + 1);
        boolean[] comp = new boolean[rng];
        if (start <= 1)
            comp[(int) (1 - start)] = true;
        int maxP = (int) Math.sqrt((double) end) + 1;
        boolean[] sc = new boolean[maxP + 1];
        for (int i = 2; i <= maxP; i++) {
            if (sc[i])
                continue;
            for (int j = i * 2; j <= maxP; j += i)
                sc[j] = true;
            long first = ((start + i - 1) / i) * i;
            if (first < (long) i * i)
                first = (long) i * i;
            for (long x = first; x <= end; x += i)
                comp[(int) (x - start)] = true;
        }
        boolean[] ip = new boolean[rng];
        for (int i = 0; i < rng; i++)
            ip[i] = !comp[i];
        if (start == 0)
            ip[0] = false;
        return ip;
    }

    static long solveRow(int n) {
        int rMin = n - 2, rMax = n + 2;
        long sv = rowStart(rMin), ev = rowStart(rMax + 1) - 1;
        boolean[] ip = sieveRange(sv, ev);
        boolean[][] rp = new boolean[5][], rg = new boolean[5][];
        for (int idx = 0; idx < 5; idx++) {
            int row = rMin + idx;
            rp[idx] = new boolean[row];
            rg[idx] = new boolean[row];
            long rs = rowStart(row);
            for (int col = 0; col < row; col++)
                rp[idx][col] = ip[(int) (rs + col - sv)];
        }
        for (int rid = 1; rid <= 3; rid++) {
            int rl = rMin + rid;
            for (int col = 0; col < rl; col++) {
                if (!rp[rid][col])
                    continue;
                int cnt = 0;
                for (int dr = -1; dr <= 1; dr++) {
                    int rr = rid + dr, rrl = rMin + rr;
                    for (int dc = -1; dc <= 1; dc++) {
                        int cc = col + dc;
                        if (cc >= 0 && cc < rrl && rp[rr][cc])
                            cnt++;
                    }
                }
                if (cnt >= 3) {
                    for (int dr = -1; dr <= 1; dr++) {
                        int rr = rid + dr, rrl = rMin + rr;
                        for (int dc = -1; dc <= 1; dc++) {
                            int cc = col + dc;
                            if (cc >= 0 && cc < rrl && rp[rr][cc])
                                rg[rr][cc] = true;
                        }
                    }
                }
            }
        }
        long sum = 0;
        long ms = rowStart(n);
        for (int col = 0; col < n; col++)
            if (rg[2][col])
                sum += ms + col;
        return sum;
    }

    public static void main(String[] args) {
        System.out.println(solveRow(5678027) + solveRow(7208785));
    }
}
