public class Euler479 {

    private static long modPow(long base, long exp, long mod) {
        long result = 1;
        base %= mod;
        while (exp > 0) {
            if ((exp & 1) == 1) {
                result = (result * base) % mod;
            }
            base = (base * base) % mod;
            exp >>= 1;
        }
        return result;
    }

    private static long modInverse(long a, long mod) {
        return modPow(a % mod, mod - 2, mod);
    }

    private static long solve(int n, long mod) {
        long ans = 0;
        for (long k = 1; k <= n; ++k) {
            long t = 1 - k * k;
            t %= mod;
            if (t < 0) {
                t += mod;
            }

            long contribution = 0;
            if (t == 1) {
                contribution = n % mod;
            } else {
                long pn = modPow(t, n, mod);
                long numerator = (t * ((pn + mod - 1) % mod)) % mod;
                long denom = (t + mod - 1) % mod;
                contribution = (numerator * modInverse(denom, mod)) % mod;
            }

            ans += contribution;
            if (ans >= mod) {
                ans -= mod;
            }
        }
        return ans;
    }

    public static void main(String[] args) {
        int n = 1000000;
        long mod = 1000000007L;
        System.out.println(solve(n, mod));
    }
}
