n = int(raw_input())
resultDict={}
for i in range(1, n+1):
for j in range(1, n+1):
temp = i**j
if temp in resultDict:
resultDict[temp]+=1
else:
resultDict[temp] = 1
result=0
for _,v in resultDict.iteritems():
result+=v+v*(v-1)
print result%1000000007 暴力O(n^2),过40
public class Test {public static final int f = 1000000007;public static int num(int n){ if(n==1) return 1; return (num(n-1)+4n-3+sub1(n)+sub2(n))%f;}private static int sub1(int n){ int r=0; for(int i=2;i<=n/2;i++){ if(n%2==0){ int m = (int)Math.pow(n, 1.0/i) - 1; if(m>0) r += 2m; } } return r;}private static int sub2(int n){ int r=0; int le = (int)(Math.log(n)/Math.log(2)); for(int i=2;i<le;i++){ double d = Math.pow(n, 1.0/i); if(d-(int)d<0.000000001){ int m = (n-1)/i; r += 2*m; } } return r;}}