#include typedef long long ll; using namespace std; /* pick a number and gain n[i] points delete all numbers equal to n[i] - 1 and n[i] + 1 the maximum that I can get in number n[i] is max (dp[i - 1], dp[i - 2] + points(i)) */ ll deleteAndEarn(vector& nums) { unordered_map freq; int maxN = INT_MIN; for (int i : nums) { maxN = max(maxN, i); freq[i]++; } int N = maxN; vector dp(N + 1, 0); dp[1] = freq[1]; for (int i = 2; i <= N; i++) { dp[i] = max(freq[i] * i + dp[i - 2], dp[i - 1]); } return dp[N]; } int main(){ int n; cin >> n; vector nums(n); for (int i = 0; i < n; i++) cin >> nums[i]; cout << deleteAndEarn(nums) << endl; return 0; }