import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.StringTokenizer;
/**
* @author 은서파
* @since 2021. 10. 19.
* @see
* @performance 337344 816
* @category #
* @memo
*/
public class BJ_S3_15486_퇴사2{
static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder output = new StringBuilder();
static StringTokenizer tokens;
static int N; // 1<=N<=1,500,000
static int MAX;
static int [][] data;
public static void main(String[] args) throws IOException {
input = new BufferedReader(new StringReader(src));
N = Integer.parseInt(input.readLine());
data = new int [N+1][2];
for(int n=1; n<=N; n++) {
tokens = new StringTokenizer(input.readLine());
data[n][0]=Integer.parseInt(tokens.nextToken());
data[n][1]=Integer.parseInt(tokens.nextToken());
}// 입력 완료!!
dp();
System.out.println(MAX);
}
static void dp() {
// N일째에 하루짜리 일을 하면 N+1일째가 최대 수익
int [] dp = new int[N+2];
for(int n=1; n<=N; n++) {
// 오늘 작업의 결과 반영
int next = n + data[n][0];
if(next <=N+1) {
dp[next] = Math.max(dp[n] + data[n][1], dp[next]);
}
// 오늘 한 일은 내일 정산을 받는다.
dp[n+1]= Math.max(dp[n], dp[n+1]);
}
MAX = dp[N+1];
}
// REMOVE_START
private static String src = "7\n"
+ "3 10\n"
+ "5 20\n"
+ "1 10\n"
+ "1 20\n"
+ "2 15\n"
+ "4 40\n"
+ "2 200";
// REMOVE_END
}