#include <bits/stdc++.h>
using namespace std;

int main(){
    int n; cin >> n;
    vector<int> A(n);
    for (int i=0; i<n; i++) cin >> A[i];
    sort(A.begin(), A.end());
    int amax = A.back();
    int gcd = 0;
    int ans = 0;
    for (int i=2; i<=amax; i++){
        int cnt = 0;
        for (auto a:A){
            if (a % i == 0) cnt++;
        }
        if (gcd < cnt){
            gcd = cnt; ans = i;
        }
    }
    cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;
#define M 1000000007
#define U 998244353
#define N 1000005
#define int long long
#define sz(c) (int)c.size()
#define fr first
#define ll long long 
#define sc second
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define all(a) (a).begin(),(a).end()
#define rep(i,a,n) for(int i=a ; i<n ; i++)
#define r0 return 0;
#define endl '\n'
#define INF (int)1e15

/* Debug Begins */ 
# define trace(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); \
  stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
string to_string(char c) { return "'" + string(1, c) + "'";}
string to_string(string s) { return '"' + s + '"';}
string to_string(bool f) { if(f) return "True"; else return "False";}
string to_string(const char* s) { return to_string((string) s);}
template<typename A> string to_string(A);
template<typename A, typename B> string to_string(pair<A, B> p){
  return "(" + to_string(p.first) + ": " + to_string(p.second) + ")";}
template<typename A> string to_string(A v) {bool f = false; string r = "{"; 
  for (auto x: v) {if (f) r += ", "; r += to_string(x); f = true;} return r += "}";}
template<typename A> string to_string(vector<vector<A>> v) {string r; 
  for (auto x: v) r += "\n" + to_string(x); return r;}
int Nerr;
template<typename A> string to_string(A *p) {return to_string(vector<A>(p, p + Nerr));}
void err(istream_iterator<string>) { cerr << endl; }
template<typename T,typename... Args> void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << to_string(a) << "; "; err(++it, args...); }
template<typename T> void kek(T ans) {cout << ans << endl; exit(0);}
#define Lu(...) [&] (auto &&u) { return __VA_ARGS__; }
#define Luv(...) [&] (auto &&u, auto &&v) { return __VA_ARGS__; }
/***************************************************************/

set<int> primeFactors(int n)  
{   
    set<int> ans;
    while (n % 2 == 0)  
    {  
        ans.insert(2);
        n = n/2;  
    }  
    for (int i = 3; i <= sqrt(n); i = i + 2)  
    {    
        while (n % i == 0)  
        {  
            ans.insert(i);
            n = n/i;  
        }  
    }  
    if (n > 2)  
        ans.insert(n);
    return ans;
}

signed main()
{
    ios_base::sync_with_stdio(0);
    int TESTS=1;
    // cin>>TESTS;
    while(TESTS--)
    {   
        int n;
        cin >> n;
        vector<int> a(n);
        map<int,int> m;
        rep(i,0,n){
            int t;
            cin >> t;
            set<int> f = primeFactors(t);
            for(auto j : f) m[j]++;
        }
        int ans = 0, mx = 0;
        for(auto j : m){
            if(j.sc > mx) {
                mx = j.sc;
                ans = j.fr;
            }
        }
        cout << ans;
    }
}