#include <bits/stdc++.h>
#pragma optimization_level 3
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
using namespace std;
const long double PI = 3.14159265358979323846;
const long long MOD = 1e+9 + 7;
const long long INF = LLONG_MAX;
const int INFi = INT_MAX;
const long long N = 2e+5 + 8;
vector<long long> adj[N];
long long vis[N];
long long dx4[] = {0, 1, 0, -1}, dy4[] = {1, 0, -1, 0};
long long test_cases = 1;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
;
long long n, a[N], res = 0;
map<long long, long long> first;
vector<pair<long long, long long> > v;
void MAIN(long long tc) {
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    first[a[i]]++;
  }
  v.push_back({0, 0});
  v.push_back({INF, INF});
  for (auto it : first) v.push_back({it.second, it.first});
  sort((v).begin(), (v).end());
  for (long long st = 1; st <= N - 1; st++) {
    long long j = 0;
    long long cur = st;
    long long cnt = 0;
    while (true) {
      long long nxt =
          lower_bound(j + 1 + (v).begin(), (v).end(), make_pair(cur, 0LL)) -
          v.begin();
      if (v[nxt].first == INF) break;
      cur *= 2;
      j = nxt;
      cnt++;
    }
    if (j != 0) {
      res = max(res, (long long)(pow(2, cnt) - 1) * st);
    }
  }
  cout << res;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed;
  cout << setprecision(10);
  ;
  for (long long i = (1); i <= test_cases; i++) {
    MAIN(i);
  }
}
