use proconio::input; fn main() { input! { n: usize, ab: [(i64,i64); n], } let mut dp = vec![vec![-1; n + 1]; n + 1]; dp[n][0] = 0; for i in (1..=n).rev() { for count in 0..n { if dp[i][count] < 0 { continue; } dp[i - 1][count + 1] = dp[i - 1][count + 1].max(dp[i][count] + ab[i - 1].1); dp[i - 1][count] = dp[i - 1][count].max(dp[i][count] + count as i64 * ab[i - 1].0); } } println!("{}", dp[0].iter().max().unwrap()); }