#include <algorithm>
#include <iostream>
#include <vector>
#include <numeric>
#include <random>
int main() {
using namespace std;
int n;
cin >> n;
auto arr = new int64_t[n];
for (int i = 0; i < n; i++)
cin >> arr[i];
auto solve = [&] (int64_t base) -> int64_t {
vector<int64_t> factor;
for (int64_t i = 1; i * i <= base; i++)
if (base % i == 0)
{
factor.push_back(i);
if (i != base / i)
factor.push_back(base / i);
}
sort(factor.begin(), factor.end());
auto count = new int[factor.size()]();
for (int i = 0; i < n; i++)
++count[lower_bound(factor.begin(), factor.end(), gcd(arr[i], base))
- factor.begin()];
for (int i = factor.size() - 1; i > 0; i--)
{
int cnt = count[i];
for (int j = i + 1; j < factor.size(); j++)
if (factor[j] % factor[i] == 0)
cnt += count[j];
if (cnt >= (n + 1) / 2)
{
delete[] count;
return factor[i];
}
}
delete[] count;
return 1;
};
mt19937 rng(1312537);
uniform_int_distribution<> dist(0, n - 1);
int64_t ans = 1;
for (int i = 0; i < 11; i++)
ans = max(ans, solve(arr[dist(rng)]));
cout << ans << endl;
delete[] arr;
return 0;
}