#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int>cnt(100001),dp(100001);
void solve() {
int n;cin>>n;
vector<int>a(n);
int max_a=0;
for(int i=0;i<n;i++){
cin>>a[i];cnt[a[i]]++;
max_a=max(max_a,a[i]);
}
dp[1]=cnt[1];
for(int i=2;i<=max_a;i++)
dp[i]=max(dp[i-1],dp[i-2]+i*cnt[i]);
cout<<dp[max_a];
}//把相同的数放在一起当成一个整体,然后排序(当然并不是说有排序这个步骤),题目就变成了求相邻值不能选的最大和,然后需要注意的是dp[i]表示的是从最大数为i时的最大和。然后根据这个去递推状态。
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
solve();
return 0;
}
// 64 位输出请用 printf("%lld")