The maximum gn value (aka multiprogramming level) that you can set is going to vary depending on:

whether you are using 32 or 64 bit software

the version that you are using

what other features that you are using in the software and hence what other DLLs/SOs the server process will be loading: e.g. OMNI/CIS/proxy tables, external stored procedures

how many concurrent connections (and hence how much communications buffer space needs to be allocated)

... and likely a few other things that I can't think of at the moment

Increasing the gn value arbitrarily is definitely a bad idea. As you increase gn you may initially see an increase in total throughput but then you will see a decrease in overall performance as the server sees increased contention for resources (e.g. row locks).

Version 12 contains a new feature called "automatic multiprogramming level tuning" and it is on by default. This feature in the server automatically adjusts the gn value of your running server to best suit the workload on the server at that time. The server continuously monitors the workload and total throughput (number of completed requests) and will do this adjustment every 30 seconds. This paper talks more about how this works. You can read more about this feature and other new features in SA 12 here.