Rinse and sort through the dried beans, removing any stones or damaged beans. Place in a large bowl and cover with cold water by at least 2 inches. Let soak overnight (at least 8 hours).
In a large Dutch oven or heavy-bottomed pot, heat the olive oil over medium heat. Add the onions, carrots, and celery, cooking until the vegetables begin to soften, about 5-7 minutes.
Add the garlic and cook for another 30 seconds until fragrant.
Drain and rinse the soaked beans. Add them to the pot along with the ham bone, bay leaves, thyme, and black pepper.
Pour in the chicken broth and bring to a gentle boil. Reduce heat to maintain a slow simmer, cover partially, and cook for about 2 hours, stirring occasionally.
Remove the ham bone and bay leaves from the pot. Pull any remaining meat from the bone, chop it, and return it to the soup.
Taste and adjust seasoning with salt if needed, keeping in mind that ham adds significant salt.
Stir in fresh parsley just before serving.