Rinse and soak the navy beans overnight or quick-soak for 1 hour.
In a large pot or Dutch oven, sauté onions, carrots, and celery until softened.
Add garlic and cook for 1 minute until fragrant.
Add soaked beans, ham bone (or diced ham), bay leaves, broth, and black pepper.
Bring to a boil, then reduce heat and simmer for 2–2.5 hours until beans are tender.
Remove the ham bone, shred any meat, and return it to the soup.
Taste and season with salt as needed.
Serve hot, garnished with fresh parsley and optionally with bread or cornbread.