#include <bits/stdc++.h>
using namespace std;
long long n;
long long a[500001];
long long dp[10001][4];
map<string, long long> mp;
void fun2(long long i, string s, string a) {
  if (i <= 5) return;
  if (dp[i][a.length()] == 0) return;
  dp[i][a.length()] = 0;
  string z;
  z.append(1, s[i - 1]);
  z.append(1, s[i]);
  string c;
  mp[z] = 1;
  if (z != a) {
    fun2(i - 2, s, z);
  }
  if (i > 6) {
    c.append(1, s[i - 2]);
    c.append(1, s[i - 1]);
    c.append(1, s[i]);
    mp[c] = 1;
    if (c != a) {
      fun2(i - 3, s, c);
    }
  }
}
void fun() {
  long long i, j, m = 0, k, x = 1, t;
  string s;
  cin >> n;
  long double a[n];
  for (i = 0; i < n; i++) {
    cin >> a[i];
  }
  sort(a, a + n);
  long double z, ans, max = 0;
  z = 1;
  for (i = n; i >= 1; i--) {
    if (abs(a[i - 1] - 1) < 1e-9) {
      cout << "1.000000" << endl;
      return;
    }
    z = (1 - a[i - 1]) * z;
    ans = 0;
    for (j = n - 1; j >= i - 1; j--) {
      ans += (z * (a[j])) / (1 - a[j]);
    }
    if (ans > max) {
      max = ans;
    } else
      break;
  }
  cout << setprecision(12) << max << endl;
}
int main() {
  long long t = 1;
  while (t--) {
    fun();
  }
}
