#include <bits/stdc++.h>
#include <sys/mman.h>
#include <sys/stat.h>
using namespace std;
struct RdMap {
char* p, * last;
};
static RdMap rdmap_;
void map_stream(FILE* stream)
{
struct stat sb;
int fd = fileno(stream);
fstat(fd, &sb);
void* addr = mmap(0, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
assert(addr != MAP_FAILED);
rdmap_.p = static_cast<char*>(addr);
rdmap_.last = rdmap_.p + sb.st_size;
}
inline int readchar()
{
if (builtin_expect(rdmap.p != rdmap.last, 1))
return *rdmap_.p++;
return EOF;
}
long int readlong()
{
long int v = 0, m = 1;
int c;
while ( isspace(c = readchar()) )
;
if (c == '-') {
c = readchar();
m = -1;
}
c -= '0';
while ( static_cast<unsigned int>(c) < 10U ) {
v = v * 10 + c;
c = readchar() - '0';
}
return v * m;
}
#define FOR(i, a, b)
for ( i = (a); i < (b); i++ )
#define ROF(i, a, b)
for ( i = (b); (a) < i–; )
constexpr int NMAX = 5*pow(10, 5);
void rsort(int a[], int n)
{
static int t[NMAX];
int* b = t, i, j;
FOR(i, 0, 4) {
auto mask = [i](unsigned int x)
{ return (x >> i*8) % 256; };
int h[256]{};
FOR(j, 0, n)
h[mask(a[j])]++;
FOR(j, 1, 256)
h[j] += h[j-1];
ROF(j, 0, n)
b[--h[mask(a[j])]] = a[j];
swap(a, b);
}
}
int main(int argc, char* argv[])
{
map_stream(stdin);
int n = readlong();
int i;
static int v[NMAX];
FOR(i, 0, n) {
v[i] = readlong();
}
rsort(v, n);
long int res = 0;
FOR(i, 0, n) {
res = max(res, static_cast<long int>(v[i]) * (n - i));
}
printf("%ld\n", res);
return 0;
}