// Original C++ solution (slower):
#include<bits/stdc++.h>

using namespace std;



typedef long long ll;

typedef unsigned long long ull;

typedef double dd;

typedef vector<int> vi;

typedef vector<ll> vl;

typedef pair<int,int> pii;



const int mx=1e6+11;

const double PI = acos(-1);

#define MOD 1000000007



#define nl '\n'

#define pb push_back

#define F first

#define S second

#define I insert

#define mp make_pair



#define sz(x) x.size()

#define tt int t; cin>>t; while(t--)

#define be(a) (a).begin(),(a).end()

#define rbe(a) (a).rbegin(),(a).rend()

#define mem(a,b) memset(a,b,sizeof(a))

#define yes cout<<"Yes"<<nl

#define no cout<<"No"<<nl



#define su ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

#define file freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);

#define frac cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);



template < typename F, typename S >

ostream& operator << ( ostream& os, const pair< F, S > & p ) {

            return os << "(" << p.first << ", " << p.second << ")";

}



template < typename T >

ostream &operator << ( ostream & os, const vector< T > &v ) {

            os << "{";

                for(auto it = v.begin(); it != v.end(); ++it) {

                                if( it != v.begin() ) os << ", ";

                                        os << *it;

                                            }

                    return os << "}";

}



template < typename T >

ostream &operator << ( ostream & os, const set< T > &v ) {

            os << "[";

                for(auto it = v.begin(); it != v.end(); ++it) {

                                if( it != v.begin() ) os << ", ";

                                        os << *it;

                                            }

                    return os << "]";

}



template < typename T >

ostream &operator << ( ostream & os, const multiset< T > &v ) {

            os << "[";

                for(auto it = v.begin(); it != v.end(); ++it) {

                                if( it != v.begin() ) os << ", ";

                                        os << *it;

                                            }

                    return os << "]";

}



template < typename F, typename S >

ostream &operator << ( ostream & os, const map< F, S > &v ) {

            os << "[";

                for(auto it = v.begin(); it != v.end(); ++it) {

                                if( it != v.begin() ) os << ", ";

                                        os << it -> first << " = " << it -> second ;

                                            }

                    return os << "]";

}



#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)



void faltu () {

            cerr << endl;

}



template <typename T>

void faltu( T a[], int n ) {

            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';

                cerr << endl;

}



template <typename T, typename ... hello>

void faltu( T arg, const hello &... rest) {

            cerr << arg << ' ';

                faltu(rest...);

}





int gcd(int a,int b){return b ? gcd(b,a%b) : a;}

int lcm(int a,int b){return (a*( b/ gcd(a,b)));}



void f()

{

  int n,a,sum=0;

  cin>>n;

  vi v;

  while(n--)

  {

    cin>>a;

    v.pb(a);

    sum+=a;

  }

  if(sum-*max_element(be(v))>*max_element(be(v)))

    yes;

  else

    no;

}



int main()

{

    su;

    f();

    return 0;

}


// Optimized solution to the same problem (faster):
#include <cstdio>

int main() {

    int n = 0, t = 0, tot = 0, maxLen = 0;

    scanf("%d", &n);

    for (int i = 0; i < n; i++) {

        scanf("%d", &t);

        if (t > maxLen)

            maxLen = t;

        tot += t;

    }

    printf((maxLen * 2 < tot) ? "Yes" : "No");

    return 0;

}

// Fastest known solution for this problem: