import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; public class Main { public static void main(String[] args) throws NumberFormatException, IOException{ ContestScanner in = new ContestScanner(); int n = in.nextInt(); long count = 0; long max = 1000000007L; for(int i=0; i= max) val %= max; if(d >= max) d %= max; count += val*d; if(count >= max){ count %= max; } } System.out.println(count); } } class MyComp implements Comparator{ public int compare(int[] a, int[] b) { return a[0] - b[0]; } } // //class Reverse implements Comparator{ // public int compare(Integer arg0, Integer arg1) { // return arg1 - arg0; // } //} class Node{ int id; List edge = new ArrayList(); public Node(int id){ this.id = id; } public void createEdge(Node node){ edge.add(node); } } class MyMath{ public final static double PIhalf = Math.PI/2.0; public static double pAngle(double x, double y){ // ベクトル(1, 0)と(x, y)とのなす角を返す(rad:0 to 2pi) if(x == 0){ if(y == 0){ System.err.println("pAngle error: zero vector."); return 0; }else if(y < 0){ return PIhalf*3.0; }else{ return PIhalf; } } double rad = Math.atan(y/x); if(rad < 0){ rad += Math.PI*2.0; } return rad; } public static long fact(long n){ long res = 1; while(n > 0){ res *= n--; } return res; } public static long[][] pascalT(int n){ long[][] tri = new long[n][]; for(int i=0; i