#include <bits/stdc++.h>
template <class T>
inline T max(const T &x, const T &y) {
  return x > y ? x : y;
}
template <class T>
inline T min(const T &x, const T &y) {
  return x < y ? x : y;
}
template <class T>
inline bool chkmax(T &x, const T &y) {
  return x < y ? x = y, true : false;
}
template <class T>
inline bool chkmin(T &x, const T &y) {
  return x > y ? x = y, true : false;
}
inline int read() {
  register int x = 0, v = 1;
  register char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') v = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * v;
}
const int MOD = 1e9 + 7;
const int MAXN = 14;
int n;
int a[MAXN | 1], e[MAXN | 1][MAXN | 1], f[1 << MAXN];
int p1[1 << MAXN], p2[1 << MAXN];
inline int add(int x, int y) { return x + y >= MOD ? x + y - MOD : x + y; }
inline int sub(int x, int y) { return x < y ? x - y + MOD : x - y; }
int fpow(int x, int y) {
  int res = 1, base = x;
  while (y > 0) {
    if (y & 1) res = 1ll * res * base % MOD;
    base = 1ll * base * base % MOD;
    y >>= 1;
  }
  return res;
}
std::pair<int, int> approx(int p, int q, int A = MOD) {
  int x = q, y = p, a = 1, b = 0;
  while (x > A) {
    std::swap(x, y);
    std::swap(a, b);
    a -= x / y * b;
    x %= y;
  }
  return std::make_pair(x, a);
}
int main() {
  n = read();
  for (int i = 0; i < n; ++i) a[i] = read();
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      if (i != j) e[i][j] = 1ll * a[i] * fpow(a[i] + a[j], MOD - 2) % MOD;
  for (int S = 1; S < 1 << n; ++S) {
    p1[S] = 1;
    for (int i = 0; i < n; ++i)
      if (S & (1 << i))
        for (int j = 0; j < n; ++j)
          if (!(S & (1 << j))) p1[S] = 1ll * p1[S] * e[i][j] % MOD;
  }
  int ans = 0;
  for (int S = 1; S < 1 << n; ++S) {
    static std::vector<int> tmp;
    tmp.clear();
    for (int T = (S - 1) & S; T > 0; T = (T - 1) & S) tmp.push_back(T);
    std::reverse(tmp.begin(), tmp.end());
    p2[0] = 1;
    f[S] = 1;
    for (int T : tmp) {
      int lb = T & (-T), id = log2(lb);
      p2[T] = p2[T ^ lb];
      for (int i = 0; i < n; ++i)
        if (!(S & (1 << i))) p2[T] = 1ll * p2[T] * e[id][i] % MOD;
      int p = 1ll * p1[T] * fpow(p2[T], MOD - 2) % MOD;
      f[S] = sub(f[S], 1ll * f[T] * p % MOD);
    }
    int p = 1;
    for (int i = 0; i < n; ++i)
      if (S & (1 << i))
        for (int j = 0; j < n; ++j)
          if (!(S & (1 << j))) p = 1ll * p * e[i][j] % MOD;
    ans = add(ans, 1ll * __builtin_popcount(S) * f[S] % MOD * p % MOD);
  }
  printf("%d\n", ans);
  return 0;
}
