#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod = 1e9 + 7;
int n;
int a[100010];
int path[6];
int ans;
bool judge(int a, int b, int c)
{
if (a+b > c && a+c > b && b+c > a){
return true;
}
return false;
}
bool deal(int way[])
{
int a, b, c;
for (int i=1; i <= 4; i ++)
{
for (int j=i+1; j <= 4; j ++)
{
a = way[i]+way[j];
for (int k=1; k <= 4; k ++)
{
if (k != i && k != j)
b = way[k];
for (int l=1; l <= 4; l ++)
{
if (l !=k && l != j && l != i)
{
c = way[l];
if (judge(a, b, c))
return true;
}
}
}
}
}
return false;
}
void dfs(int u, int last)
{
if (u > 4)
{
if (deal(path))
{
ans ++;
ans%=mod;
}
return ;
}
for (int i=last; i <= n; i ++)
{
path[u] = a[i];
dfs (u + 1, i+1);
}
}
int main()
{
cin >> n;
for (int i=1; i <= n; i ++)
cin >> a[i];
dfs(1, 1);
cout << ans%mod;
return 0;
}